小編給大家分享一下js如何實現(xiàn)哈弗曼編碼,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:空間域名、網(wǎng)頁空間、營銷軟件、網(wǎng)站建設(shè)、洛浦網(wǎng)站維護(hù)、網(wǎng)站推廣。需要的朋友可以參考下
哈夫曼編碼,根據(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())
以上是“js如何實現(xiàn)哈弗曼編碼”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
當(dāng)前文章:js如何實現(xiàn)哈弗曼編碼-創(chuàng)新互聯(lián)
網(wǎng)頁網(wǎng)址:http://m.rwnh.cn/article2/cssjic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗、網(wǎng)站設(shè)計、手機(jī)網(wǎng)站建設(shè)、搜索引擎優(yōu)化、外貿(mào)建站、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容