哈夫曼编码,根据每个单词在文本中出现的次数频率为权值,频率高的权值大。然后每次取两个频率最小的生成树,最后生成一颗大树。从根节点到该单词的路径,左边为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++){ //寻找两个权值最小,且父节点为-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;  //更新父节点HuffNode[x2].parent = n + i;//创建一个新的节点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())

  

转载于:https://www.cnblogs.com/muamaker/p/9401472.html

js神秘的电报密码---哈弗曼编码相关推荐

  1. 数据结构——哈弗曼编码问题

    实验六 基于哈夫曼树的数据压缩算法 [实验目的] 掌握哈夫曼树的构造算法. 掌握哈夫曼编码的构造算法. [实验内容] 问题描述 输入一串字符,根据给定的字符串中字符出现的频率建立相应的哈夫曼树, 构造 ...

  2. 哈夫曼树和哈弗曼编码

     这里第一步,取出最小权值的c跟d 组成新树,6(这里6是权值,由组成的结点权值相加) 2 4 ,然后再重复造新树 把b拉进来 组成 11 5 6 2 4,一直到权值最高的结点也被拉进来组成新树,最后 ...

  3. huffman编码译码器用c语言,基于哈弗曼编码的数据压缩C语言实现

    haod 摘要 数据压缩技术是一项重要实用的信息技术.信息时代的到来,信息量迅速增长,使得数据压缩也显得越来越重要.数据压缩有多种编码方法,大致可分为无损压缩编码和有损压缩编码.其中,Huffman ...

  4. 哈夫曼编码(Huffman)Java实现代码简化版

    这个网上发现的Huffuman编码Java实现在组织上相对简化,便于理解文件压缩过程:提取文件统计字符频度-根据字符频度创建huffman树-根据huffman树生成huffman可变字长无前缀编码- ...

  5. 哈夫曼编码(Huffman)Java实现代码

    网上找到的一个组Huffman编码Java实现代码,比较经典. 1.主类,压缩和解压 package cn.hm;import java.io.BufferedInputStream; import ...

  6. 哈夫曼编码压缩率计算_程序员的算法课(8)-贪心算法:理解霍夫曼编码

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/ ...

  7. 基于哈夫曼编码完成的文件压缩及解压

    这几天在较为认真的研究基于哈夫曼编码的文件压缩及解压,费了点时间,在这分享一下: 这里用链式结构,非顺序表结构: 文件压缩: 1.获取文件信息(这里采用TXT格式文本): 2.压缩文件: 3.写配置文 ...

  8. 数据压缩之经典——哈夫曼编码(Huffman)

    (笔记图片截图自课程Image and video processing: From Mars to Hollywood with a stop at the hospital的教学视频,使用时请注意 ...

  9. 程序员的算法课(8)-贪心算法:理解霍夫曼编码

    一.一种很贪婪的算法定义 贪心是人类自带的能力,贪心算法是在贪心决策上进行统筹规划的统称. [百度百科]贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体 ...

  10. MATLAB编程实现哈夫曼编码

    用MATLAB编程实现哈夫曼编码 一.实验目的 理解信源编码的意义 熟悉 MATLAB程序设计: 掌握哈夫曼编码的方法及计算机实现 二.实验原理 统计n个信源消息符号,得到n个不同概率的信息符号 将这 ...

最新文章

  1. 2020牛客多校G[并查集的两种思想,按秩合并+路径压缩]
  2. 采用SpringBoot、MyBatis-Plus 、Security框架,开发的一套权限系统,实现前后端分离,完善的代码生成机制
  3. pytorch使用 torchvision 的 Transform 读取图片数据
  4. Java语法基础-1
  5. 8-1日复习 模板函数 模板类
  6. java可以返回微妙吗_Java开发中10个最为微妙的最佳编程实践
  7. el-input的使用
  8. STM32 I2C通信(读写eeprom)
  9. 数组维度超过了支持的范围_数组公式基础:多值和单值结果_
  10. SQL PASS西雅图之行——University of Washington篇
  11. java字符串转字符串数组_Java字符串数组
  12. tcp测试监听工具_高清无码多图详解!性能测试六大核心体系(没人的时候偷偷看)...
  13. c语言 算日期,C语言 · 日期计算
  14. 微信小程序云开发开源项目:在线捐赠功德箱
  15. Unity3D动态加载FBX文件
  16. Robotframework(三)常用API介绍
  17. 亚马逊森林大火----- 我也来评论一下
  18. 以太坊parity安装
  19. sql查询结果加上序号
  20. android 蓝牙自动连接,蓝牙自动连接实现

热门文章

  1. Linux服务器开通443端口
  2. Win10出现“你需要权限才能执行此操作”提示的解决方法--win7w.com
  3. 小米十周年,雷军卖情怀
  4. JetBrain软件不同版本下载
  5. android半透明图层颜色叠加,Android 图层混合模式PorterDuff.Mode
  6. 【金三银四】Java基础知识面试题(2021最新版)
  7. 微信公众号 微信连wifi最全的教程
  8. 国内物联网平台初探(八):中移物联网开放平台OneNet
  9. 删除文件unlink
  10. 华为emul升级_EMUI11正式版下载_华为emui11下载最新完整包2020(附升级教程及支持型号)-刷机之家...