js神秘的電報密碼 哈弗曼編碼實現(xiàn)
這篇文章主要介紹了js神秘的電報密碼 哈弗曼編碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
哈夫曼編碼,根據(jù)每個單詞在文本中出現(xiàn)的次數(shù)頻率為權值,頻率高的權值大。然后每次取兩個頻率最小的生成樹,最后生成一顆大樹。從根節(jié)點到該單詞的路徑,左邊為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++){ //尋找兩個權值最小,且父節(jié)點為-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é)點 HuffNode[x2].parent = n + i; //創(chuàng)建一個新的節(jié)點 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())
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
動態(tài)創(chuàng)建按鈕的JavaScript代碼
本文給大家分享一段JS實例代碼介紹動態(tài)創(chuàng)建按鈕的方法,需要的朋友參考下本文2016-01-01用xhtml+css寫的相冊自適應 - 類似九宮格[兼容 ff ie6 ie7 opear ]
用xhtml+css寫的相冊自適應 - 類似九宮格[兼容 ff ie6 ie7 opear ]...2007-05-05JavaScript實現(xiàn)算術平方根算法-代碼超簡單
實現(xiàn)算術平方根的方法有很多種,本文是通過JavaScript實現(xiàn)的算術平方根算法,代碼超簡單,超管用,感興趣的朋友跟著腳本之家的小編一起學習吧2015-09-09JSON.stringify(遞歸)與?JSON.parse(有限狀態(tài)自動機)的實現(xiàn)代碼
這篇文章主要介紹了JSON.stringify(遞歸)與?JSON.parse(有限狀態(tài)自動機)的實現(xiàn),本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08使用JavaScript實現(xiàn)檢測網頁是否為空閑狀態(tài)
最近開發(fā)項目時,常碰到“用戶在一定時間內無任何操作時,跳轉到某個頁面”的需求,所以本文就來使用JavaScript實現(xiàn)這一要求,需要的可以參考下2024-03-03