亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

JS實現的哈夫曼編碼示例【原始版與修改版】

2024-05-06 16:43:52
字體:
來源:轉載
供稿:網友

本文實例講述了JS實現的哈夫曼編碼。分享給大家供大家參考,具體如下:

原始版

function cal(str) {  if (typeof str !== 'string' || str.length < 1) {    return;  }  var map = {};  var i = 0;  while(str[i]) {    map[str[i]] ? map[str[i]]++ : (map[str[i]] = 1);    i++;  }  return map;}function sort(map) {  map = map || {};  var result = [];  for (key in map) {    if(map.hasOwnProperty(key)) {      var obj = {        key: key,        val: map[key]      };      result.push(new Node(null, null, obj));    }  }  return result.sort(function(x,y){return x.data.val > y.data.val});}function Node(left, right, data) {  this.left = left;  this.right = right;  this.data = data;}function makeTree(table) {  var i = 0;  var len = table.length;  var node1;  var node2;  var parentNode;  while(table.length > 1) {    parentNode = new Node(table[i], table[i+1], {key: null, val: table[i]['data'].val + table[i+1]['data'].val});    table.splice(i,2);    table.unshift(parentNode);    table.sort(function(x,y){return x.data.val > y.data.val});  }  return table;}function encode(str, ret) {  if (typeof str !== 'string' || str.length < 1) {    return;  }  var i = 0;  var result = '';  while(str[i]) {    result += ret[str[i++]];  }  return result}function reverseRet(ret) {  var result = {};  for (key in ret) {    if(ret.hasOwnProperty(key)) {      result[ret[key]] = key;    }  }  return result;}function decode(str, ret) {  var i = 0;  var result = '';  var data = '';  var map = reverseRet(ret);  while(str) {    result += str[i++];    if (result in map) {      data += map[result];      str = str.replace(new RegExp("^"+result),'');      result = '';      i = 0;    }  }  console.log(data)}function traversal(tree, code, ret) {  if (tree.left !== null) {    traversal(tree.left, code + '0', ret);  } else {    ret[tree.data.key] = code;  }  if (tree.right !== null) {    traversal(tree.right,code + '1', ret);  } else {    ret[tree.data.key] = code;  }}var ret = {};var str = 'ew qew qd ef 24 gf ewr getElementsByTagName';traversal(makeTree(sort(cal(str)))[0],'', ret)decode(encode(str, ret), ret)btoa(encode(str,ret))

修改版

function Huffman(str) {  // 需要編碼的字符串  this.str = str;  // 鍵和頻率映射表  this.keyCountMap = null;  // 編碼和鍵的映射表  this.codeKeyMap = {};  // 鍵和編碼的映射表  this.keyCodeMap = {};  // 哈夫曼樹節點列表  this.nodeList = null;  // 哈夫曼樹根節點  this.root = null;  // 哈夫曼編碼后的01序列  this.code = null;}Huffman.prototype.cal = function cal() {  str = this.str;  var map = {};  var i = 0;  while(str[i]) {    map[str[i]] ? map[str[i]]++ : (map[str[i]] = 1);    i++;  }  this.keyCountMap = map;}Huffman.prototype.sort = function sort() {  map = this.keyCountMap;  var result = [];  for (key in map) {    if(map.hasOwnProperty(key)) {      var obj = {        key: key,        val: map[key]      };      result.push(new Node(null, null, obj));    }  }  this.nodeList = result.sort(function(x,y){return x.data.val > y.data.val});}function Node(left, right, data) {  this.left = left;  this.right = right;  this.data = data;}Huffman.prototype.makeTree = function makeTree() {  var i = 0;  var len = this.nodeList.length;  var node1;  var node2;  var parentNode;  var table = this.nodeList;  while(table.length > 1) {    parentNode = new Node(table[i], table[i+1], {key: null, val: table[i]['data'].val + table[i+1]['data'].val});    table.splice(i,2);    table.unshift(parentNode);    table.sort(function(x,y){return x.data.val > y.data.val});  }  this.root = table[0] || new Node();  return this.root;}Huffman.prototype.traversal = function traversal(tree, code) {  if (tree.left !== null) {    traversal.call(this,tree.left, code + '0');  } else {    this.keyCodeMap[tree.data.key] = code;  }  if (tree.right !== null) {    traversal.call(this, tree.right,code + '1');  } else {    this.keyCodeMap[tree.data.key] = code;  }}Huffman.prototype.encode = function encode() {  this.cal();  this.sort();  var root = this.makeTree();  this.traversal(root, '');  var ret = this.keyCodeMap;  var i = 0;  var result = '';  var str = this.str;  while(str[i]) {    result += ret[str[i++]];  }  this.code = result;  console.log('encode:' + result);  return result}Huffman.prototype.reverseMap = function reverseMap() {  var ret = this.keyCodeMap;  var result = {};  for (key in ret) {    if(ret.hasOwnProperty(key)) {      result[ret[key]] = key;    }  }  this.codeKeyMap = result;  return result;}Huffman.prototype.decode = function decode() {  var i = 0;  var result = '';  var data = '';  var map = this.reverseMap();  var str = this.code;  while(str) {    result += str[i++];    if (result in map) {      data += map[result];      str = str.replace(new RegExp("^"+result),'');      result = '';      i = 0;    }  }  console.log("decode:" + data)}Huffman.prototype.encodeBase64 = function() {  try {    var base64 = btoa(this.code);    return base64;  } catch(e) {    return '';  }}var str = 'ew qew qd ef 24 gf ewr getElementsByTagName';var huffman = new Huffman(str)huffman.encode(str)huffman.decode();huffman.encodeBase64();

希望本文所述對大家JavaScript程序設計有所幫助。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品999| 色一情一乱一区二区| 日本一区二区三区在线播放| 国产91免费观看| 亚洲国产精品成人一区二区| 91久久久久久久久久久| 久久天天躁夜夜躁狠狠躁2022| 日韩av在线网站| 国产精品久久久久久久7电影| 国产精品美女www爽爽爽视频| 深夜福利亚洲导航| 欧美成人国产va精品日本一级| 国产精品自产拍高潮在线观看| 美女扒开尿口让男人操亚洲视频网站| 日韩av在线看| 久久久精品久久久久| 欧美日韩爱爱视频| 亚洲a区在线视频| 91午夜理伦私人影院| 成人网中文字幕| 亚洲综合在线中文字幕| 九九热r在线视频精品| 日韩美女在线观看| 欧美激情亚洲国产| 亚洲欧美精品在线| 国产精品99久久久久久www| 欧美老肥婆性猛交视频| 欧美在线视频网| 亚洲一区www| 91免费精品国偷自产在线| 亚洲成人精品av| 国产一区二区三区在线看| 日本中文字幕久久看| 2019中文字幕全在线观看| 亚洲一区二区精品| 欧美精品18videosex性欧美| 色先锋久久影院av| 久久久久久九九九| 日韩精品在线免费观看| 久久精品国产亚洲精品| 亚洲欧美国内爽妇网| 欧美午夜精品久久久久久浪潮| 日本最新高清不卡中文字幕| 91产国在线观看动作片喷水| 国产精品一香蕉国产线看观看| 国产欧美最新羞羞视频在线观看| 久久影视电视剧免费网站清宫辞电视| 伊人久久久久久久久久| 欧美日韩激情美女| 欧美精品亚州精品| 国产综合福利在线| 日产日韩在线亚洲欧美| 精品丝袜一区二区三区| 亚洲a级在线观看| 日韩美女写真福利在线观看| 欧美精品18videos性欧| 国模私拍一区二区三区| 欧美丝袜一区二区| 亚洲综合国产精品| 日韩欧美在线国产| 992tv在线成人免费观看| 亚洲性生活视频在线观看| 一区二区三区在线播放欧美| 色777狠狠综合秋免鲁丝| 亚洲性视频网址| 国产精品成人av性教育| 在线国产精品视频| 国产一区二区动漫| 日本成人黄色片| 欧美午夜美女看片| 国产精品久久久久aaaa九色| 亚洲已满18点击进入在线看片| 日韩视频中文字幕| 成人免费大片黄在线播放| 在线观看成人黄色| 国产精品久久久av| 久久久久亚洲精品成人网小说| 成人h视频在线观看播放| 国产999精品久久久| 欧美午夜丰满在线18影院| 91爱爱小视频k| 精品亚洲va在线va天堂资源站| 日韩av综合中文字幕| 国产不卡av在线| 国产极品精品在线观看| 51色欧美片视频在线观看| 亚洲电影免费在线观看| 亚洲第一页在线| 911国产网站尤物在线观看| 久久久伊人日本| 亚洲精品按摩视频| 欧美在线观看一区二区三区| 伊人久久久久久久久久久久久| 亚洲成人黄色网址| 91麻豆国产精品| 亚洲人成欧美中文字幕| 欧美精品在线网站| 国产午夜精品视频免费不卡69堂| 国产精品久久久久77777| 国产在线拍偷自揄拍精品| 最近2019中文免费高清视频观看www99| 欧美人在线观看| 久久久久久国产精品美女| 国产欧美久久久久久| 欧美一级在线播放| 国产亚洲精品91在线| 日本一区二三区好的精华液| 亚洲欧洲自拍偷拍| 91欧美精品午夜性色福利在线| 亚洲精品国产综合区久久久久久久| 中日韩美女免费视频网址在线观看| 色老头一区二区三区在线观看| 国产精品久久久久久久久久东京| 92看片淫黄大片看国产片| 成人黄色在线免费| 国产va免费精品高清在线| 国产拍精品一二三| 亚洲国产小视频在线观看| 国产精品亚洲美女av网站| 精品成人久久av| 国产精品成久久久久三级| 亚洲欧美国产va在线影院| 中文国产成人精品久久一| 2020欧美日韩在线视频| 免费91在线视频| 中文字幕精品国产| 国产精品久久久久久久久粉嫩av| 亚洲人午夜色婷婷| 91美女片黄在线观| 欧美日韩爱爱视频| 国产精品女主播| 国产精自产拍久久久久久| 亚洲国产中文字幕久久网| 久久久成人的性感天堂| 狠狠色噜噜狠狠狠狠97| 国产精品久久久久久久久久久久久| 久久久视频免费观看| 欧日韩不卡在线视频| 国产一区二区三区四区福利| 日本aⅴ大伊香蕉精品视频| 日韩av综合中文字幕| 久久伊人精品视频| 久久露脸国产精品| 亚洲毛片在线观看| 久久久久国产精品www| 成人观看高清在线观看免费| 国产欧美精品xxxx另类| 亚洲精品一区久久久久久| 综合网日日天干夜夜久久| 国产一区av在线| 国产丝袜一区二区| 在线观看久久久久久| 国产区精品在线观看| 欧美日韩在线观看视频小说| 国产欧美欧洲在线观看| 国产欧美在线播放| 日韩视频一区在线| 一区二区亚洲欧洲国产日韩| 日韩中文娱乐网| 欧美一区二区影院| 一区二区三区在线播放欧美| 欧美一级视频免费在线观看| 97香蕉超级碰碰久久免费的优势| 久久影院在线观看|