zoukankan      html  css  js  c++  java
  • 哈夫曼树(Huffman)的JS实现

    我本身并不懂哈夫曼树也不知道有什么用,GOOGLE了下,也只是一知半解,只是刚好看到有JAVA实现版,又看了下生成原理,感觉挺有意思,就写了一下

    有些地方可以优化,效率不怎么样的,纯好玩,也不保证一定正确,只是测试了现有数据,有答案一样而已

     1 //用于测试数据
     2 var arr = [1,2,3,4,5,6]
     3 
     4 //哈夫曼树类
     5 function Huffman (left,right) {
     6     this.left = left; //左子节点
     7     this.right = right; //右子节点
     8 }
     9 
    10 //节点值
    11 Huffman.prototype.val = function() {
    12     return (this.left.val ? this.left.val() : this.left) + (this.right.val ? this.right.val() : this.right);
    13 };
    14 
    15 //生成
    16 //list:用于生成的值,数组类型
    17 Huffman.create = function (list) {
    18     while(list.length>1){
    19         list.sort(function(a,b){
    20             a = a.val ? a.val() : a;
    21             b = b.val ? b.val() : b;
    22             return a-b;
    23         });
    24 
    25         var item = new Huffman(list.shift(),list.shift());
    26         list.push(item);
    27     }
    28     return list[0]
    29 }
    30 
    31 //示例
    32 var huff = Huffman.create(arr);

    用Canvas画的树,绿色表示原始值

  • 相关阅读:
    mysql案例 ~ 监控以及如何避免从库延迟问题
    mysql基础~开发规范
    k8s系列~mgr的应用
    k8s系列~docker mysql
    常用知识点(一)
    Windows下查看进程状态/信息
    Lua入门(一)
    Lua简介
    .NET&C#的异常处理
    数据库中的锁
  • 原文地址:https://www.cnblogs.com/varlxj/p/javascript_huffman.html
Copyright © 2011-2022 走看看