js神秘的电报密码 哈弗曼编码实现


Posted in Javascript onSeptember 10, 2019

这篇文章主要介绍了js神秘的电报密码 哈弗曼编码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

js神秘的电报密码 哈弗曼编码实现

js神秘的电报密码 哈弗曼编码实现

哈夫曼编码,根据每个单词在文本中出现的次数频率为权值,频率高的权值大。然后每次取两个频率最小的生成树,最后生成一颗大树。从根节点到该单词的路径,左边为0,右边为1,

function HFM(){
  var souce = [];   
  function createNode(node){
    var obj = {
      weight:0, 
      parent:-1,
      lchild:-1,
      rchild:-1,
      value:''
    };     
    return Object.assign(obj,node);
  }   
  this.addNode = function(node){
    //添加单词和频率(权值)
    souce.push(createNode(node));
  }   
  this.createTree = function(){
    //哈夫曼树
    var HuffNode = JSON.parse(JSON.stringify(souce));
    var n = HuffNode.length;     
    var x1,x2; //两个权值最小的索引
    var m1,m2;     //两个权值最小的值     
    for(var i = 0; i < n ; i++){
      m1 = m2 = Infinity; //初始化为最大值
      x1 = x2 = -1;       
      for(var j = 0; j < n+i; j++){ //寻找两个权值最小,且父节点为-1的
        var item = HuffNode[j];
        if(item.weight < m1 && item.parent == -1){
          m2 = m1;
          x2 = x1;           
          m1 = item.weight;
          x1 = j;
           
        }else if(item.weight < m2 && item.parent == -1){
          m2 = item.weight;;
          x2 = j;
        }
      }       
      if(x1 != -1 && x2 != -1){
        HuffNode[x1].parent = n + i; //更新父节点
        HuffNode[x2].parent = n + i;
         
        //创建一个新的节点
        HuffNode[n+i] = createNode({
          weight:m1+m2,
          lchild:x1,
          rchild:x2
        });
      }             
    }     
    return HuffNode;
  };   
  this.getCode = function(){
    //哈夫曼编码
    var n = souce.length;
    var tree = this.createTree();
    var codes = {};
    for(var i = 0; i < n; i++){
      var p = tree[i].parent;
      var code = '';
      var c = i;
      while(p != -1){ //迭代前溯
        if(tree[p].lchild == c){
          code = 0 + code;
        }else{
          code = 1 + code;
        }
        c = p;
        p = tree[p].parent;
      }       
      codes[ tree[i].value ] = code;
      console.log(tree[i].value , code);     
    }     
    return codes;
  }     
} 
var hfm = new HFM();
hfm.addNode({
  weight:5,
  value:"a"
});
hfm.addNode({
  weight:32,
  value:"b"
});
hfm.addNode({
  weight:18,
  value:"c"
});
hfm.addNode({
  weight:7,
  value:"d"
});
hfm.addNode({
  weight:25,
  value:"e"
});
hfm.addNode({
  weight:13,
  value:"f"
});
console.log(hfm.getCode())

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于jquery的地址栏射击游戏代码
Mar 10 Javascript
jQuery之尺寸调整组件的深入解析
Jun 19 Javascript
淘宝网提供的国内NPM镜像简介和使用方法
Apr 17 Javascript
JavaScript DOM操作表格及样式
Apr 13 Javascript
使用JQuery实现智能表单验证功能
Mar 08 Javascript
详解Matlab中 sort 函数用法
Mar 20 Javascript
JavaScript定义全局对象的方法示例
Jan 12 Javascript
jquery easyui DataGrid简单示例
Jan 23 Javascript
React Native仿美团下拉菜单的实例代码
Aug 08 Javascript
通过fastclick源码分析彻底解决tap“点透”
Dec 24 Javascript
JavaScript高级函数应用之分时函数实例分析
Aug 03 Javascript
基于jquery实现九宫格拼图小游戏
Nov 30 jQuery
使用js实现一个简单的滚动条过程解析
Sep 10 #Javascript
html+jQuery实现拖动滑块图片拼图验证码插件【移动端适用】
Sep 10 #jQuery
Elasticsearch实现复合查询高亮结果功能
Sep 10 #Javascript
如何通过shell脚本自动生成vue文件详解
Sep 10 #Javascript
js获取 gif 的帧数的代码实例
Sep 10 #Javascript
微信小程序实现pdf、word等格式文件上传的方法
Sep 10 #Javascript
js中console在一行内打印字符串和对象的方法
Sep 10 #Javascript
You might like
使用Apache的htaccess防止图片被盗链的解决方法
2013/04/27 PHP
PHP和javascript常用正则表达式及用法实例
2014/07/01 PHP
Yii实现复选框批量操作实例代码
2017/03/15 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
HTA版JSMin(省略修饰语若干)基于javascript语言编写
2009/12/24 Javascript
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
禁止页面刷新让F5快捷键及右键都无效
2014/01/22 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
Bootstrap每天必学之js插件
2015/11/30 Javascript
全面解析Bootstrap图片轮播效果
2015/12/03 Javascript
js一维数组、多维数组和对象的混合使用方法
2016/04/03 Javascript
windows下vue.js开发环境搭建教程
2017/03/20 Javascript
bootstrap paginator分页前后台用法示例
2017/06/17 Javascript
关于页面刷新vuex数据消失问题解决方案
2017/07/03 Javascript
微信小程序简单实现form表单获取输入数据功能示例
2017/11/30 Javascript
Fundebug支持监控微信小程序HTTP请求错误的方法
2019/02/21 Javascript
详解使用uni-app开发微信小程序之登录模块
2019/05/09 Javascript
微信小程序自定义顶部组件customHeader的示例代码
2020/06/03 Javascript
Python学习资料
2007/02/08 Python
python 把数据 json格式输出的实例代码
2016/10/31 Python
Python3学习urllib的使用方法示例
2017/11/29 Python
pandas值替换方法
2018/07/10 Python
对Python3.6 IDLE常用快捷键介绍
2018/07/16 Python
通过Python pyecharts输出保存图片代码实例
2020/11/25 Python
为您的家、后院、车库等在线购物:Spreetail
2019/06/17 全球购物
下述程序的作用是计算机数组中的最大元素值及其下标
2012/11/26 面试题
预备党员思想汇报范文
2013/12/29 职场文书
咖啡店自主创业商业计划书
2014/01/22 职场文书
2014年四风问题自我剖析材料
2014/09/15 职场文书
2014年中班下学期工作总结
2014/12/11 职场文书
2015年党风廉政建设工作总结
2015/04/09 职场文书
毕业赠语大全
2015/06/23 职场文书
导游词之张家界
2019/10/31 职场文书
浅谈Web Storage API的使用
2021/06/23 Javascript
Vue+TypeScript中处理computed方式
2022/04/02 Vue.js