国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

js神秘的電報密碼 哈弗曼編碼實(shí)現(xiàn)

2019-11-19 10:50:25
字體:
供稿:網(wǎng)友

這篇文章主要介紹了js神秘的電報密碼 哈弗曼編碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

哈夫曼編碼,根據(jù)每個單詞在文本中出現(xiàn)的次數(shù)頻率為權(quán)值,頻率高的權(quán)值大。然后每次取兩個頻率最小的生成樹,最后生成一顆大樹。從根節(jié)點(diǎn)到該單詞的路徑,左邊為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){    //添加單詞和頻率(權(quán)值)    souce.push(createNode(node));  }     this.createTree = function(){    //哈夫曼樹    var HuffNode = JSON.parse(JSON.stringify(souce));    var n = HuffNode.length;         var x1,x2; //兩個權(quán)值最小的索引    var m1,m2;     //兩個權(quán)值最小的值         for(var i = 0; i < n ; i++){      m1 = m2 = Infinity; //初始化為最大值      x1 = x2 = -1;             for(var j = 0; j < n+i; j++){ //尋找兩個權(quán)值最小,且父節(jié)點(diǎn)為-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; //更新父節(jié)點(diǎn)        HuffNode[x2].parent = n + i;                 //創(chuàng)建一個新的節(jié)點(diǎn)        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())

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 曲麻莱县| 义马市| 上虞市| 黎平县| 浦江县| 万荣县| 古蔺县| 将乐县| 东山县| 咸丰县| 定陶县| 米易县| 宁阳县| 西峡县| 长垣县| 民权县| 鄂尔多斯市| 洛南县| 宣威市| 德化县| 阳东县| 河西区| 文登市| 永兴县| 浪卡子县| 乌海市| 望城县| 绥德县| 松溪县| 东港市| 大厂| 武功县| 琼结县| 罗平县| 建平县| 信阳市| 九寨沟县| 宁国市| 南充市| 金昌市| 潼关县|