手机版

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

时间:2021-08-20 来源:互联网 编辑:宝哥软件园 浏览:

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

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

函数HFM(){ var souce=[];函数创建节点(node){ var obj={ weight :0,parent:-1,lchild:-1,archil d :-1,value : ' ' };返回Object.assign(obj,node);}这个。addnode=函数(节点){//添加单词和频率(权值)souce。push(创建节点(node));} this.createTree=function(){ //哈夫曼树var HuffNode=JSON。解析(JSON。stringify(souce));var n=HuffNode.lengthvar x1,x2;//两个权值最小的索引var m1、m2;//两个权值最小的值for(var I=0;I n;I){ m1=m2=无穷大;//初始化为最大值x1=x2=-1;for(var j=0;日本国际协力事业团;j ){ //寻找两个权值最小,且父节点为-1的var item=HuffNode[j];if(项目。重量m1项目。parent==-1){ m2=m1;x2=x1m1=项目。重量;x1=j;} else if(item。重量m2项目。parent==-1){ m2=item。重量;x2=j;} } if(x1!=-1 x2!=-1){ HuffNode[x1].家长=n I;//更新父节点HuffNode[x2].家长=n I;//创建一个新的节点HuffNode[n I]=创建节点({ weight : m1 m2,lchild:x1,archi LD : x2 });} }返回HuffNode };this.getCode=function(){ //哈夫曼编码var n=souce.lengthvar tree=this。创建树();定义变量代码={ };for(var I=0;I n;i ){ var p=tree[i].父母;定义变量代码=' ';var c=I;while(p!=-1){ //迭代前溯如果(树p .lchild==c){ code=0 code;} else { code=1 code } c=p;p=树p .父母;}代码[树[i].值]=代码;console.log(树[i].值、代码);}返回代码;} } var hfm=新HFM();hfm.addNode({ weight:5,值: ' a ' });hfm.addNode({ weight:32,值: ' b ' });hfm.addNode({ weight:18,值: ' c ' });hfm.addNode({ weight:7,值: ' d ' });hfm.addNode({ weight:25,值: ' e ' });hfm.addNode({ weight:13,值: ' f ' });console.log(hfm.getCode())以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

版权声明:js神秘的电报密码哈弗曼编码实现是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。