中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

js如何實現(xiàn)哈弗曼編碼-創(chuàng)新互聯(lián)

小編給大家分享一下js如何實現(xiàn)哈弗曼編碼,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:空間域名、網(wǎng)頁空間、營銷軟件、網(wǎng)站建設(shè)、洛浦網(wǎng)站維護(hù)、網(wǎng)站推廣。

需要的朋友可以參考下

js如何實現(xiàn)哈弗曼編碼

js如何實現(xiàn)哈弗曼編碼

哈夫曼編碼,根據(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://www.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)

成都seo排名網(wǎng)站優(yōu)化
陇西县| 清涧县| 隆化县| 林州市| 施甸县| 黑山县| 营山县| 沧州市| 噶尔县| 临沂市| 安远县| 神池县| 合川市| 万盛区| 汉源县| 济源市| 屏东市| 唐河县| 友谊县| 安陆市| 宁夏| 蒲城县| 卢氏县| 乐陵市| 柳林县| 青河县| 瑞安市| 盐池县| 进贤县| 丰台区| 克拉玛依市| 巍山| 弥勒县| 隆尧县| 丽江市| 靖州| 娄底市| 禄劝| 灌阳县| 永平县| 商丘市|