• 1.Huffman树

今天复习Huffman树。依稀记得自己被Huffman树虐的经历。还记得是7月份,我刚开始看数据结构与算法,根本看不懂Huffman树的操作。后来我终于悟出了Huffman树是怎么操作的了,但是被C艹的指针虐:用C艹的CArray存贮结点,但是读出来是空的。这是因为当时使用了“CBTtree node;”这样的声明方式,因为C艹的变量的生命周期,一个语句块或者一个循环结束后node就被释放了。所以改为“ CBTtree * node = new CBTtree; ”就没有问题了。

后面又出现了一个逻辑盲区,就是在对CArray进行删除结点操作的时候,没有 “ if(pos[0]<pos[1]) pos[1]--; ”语句,导致删除了错误的结点或者越界错误。

Java code:

     void Huffman(int []nums){
int len=nums.length;
int i;
List<BTNode> nodes=new ArrayList<BTNode>();
for(i=0;i<len;i++){
BTNode node=new BTNode(nums[i]);
nodes.add(node);
}
while(nodes.size()>1){
int pos[]={0,0};
int min[]={0x7FFFFFFF,0x7FFFFFFF}; //index=0: 最小 , index=1: 次小
for(i=0;i<nodes.size();i++){
int value=Integer.parseInt(nodes.get(i).data);
if(value<min[0]){
min[1]=min[0];//传递,最小值被占据,理应把原来的最小值传给次小值
pos[1]=pos[0];
min[0]=value;
pos[0]=i;
}else if(value<min[1]){//通过 else if 语句,说明次小值是大于最小值,但是小于原次小值的
min[1]=value;
pos[1]=i;
}
}
//将两个最小的节点取出,用他们的之的和形成一个新的节点
BTNode parent=new BTNode();
parent.data=String.valueOf(min[0]+min[1]);
parent.lChild=nodes.get(pos[0]);
parent.rChild=nodes.get(pos[1]);
//将两个节点取出
nodes.remove(pos[0]);
if(pos[0]<pos[1]) pos[1]--;//☆☆如果出现这个逻辑盲点,将导致代码出错
nodes.remove(pos[1]);
nodes.add(parent);
}
root=nodes.get(0);
}

输入:5,3,7,8,11,14,23,29

输出:


  • 2.Huffman编码

前缀编码:任一个编码都不是另一个字符编码的前缀

     void HuffmanCode(BTNode parent,String code){
if(parent.lChild==null) {System.out.println(parent.data+" : "+code);return;}
else HuffmanCode(parent.lChild,code+"0");
if(parent.rChild==null) {System.out.println(parent.data+" : "+code);return;}
else HuffmanCode(parent.rChild,code+"1");
}

输入:

5,3,7,8,11,14,23,29

输出:

最新文章

  1. 烂泥:利用awstats分析nginx日志
  2. 使用--gc-section编译选项减小程序体积
  3. php set_time_limit()用法测试详解
  4. 收缩SQL Server 数据库的几种方法
  5. I2C总线协议的简要说明
  6. Java NIO教程 Selector
  7. js - ajax中的get和post说明
  8. 黄聪:WordPress 备案期间临时关闭站点设置404
  9. jQuery 快速入门教程
  10. 【c语言】调整数组使奇数所有都位于偶数前面
  11. AC日记——codevs1688求逆序对
  12. [maven] 新建项目一直提示loading archetype list
  13. Parse error: syntax error, unexpected &#39;[&#39; in D:\phpStudy\WWW\tp5\thinkphp\library\think\Loader.php on line 18
  14. Android八门神器(一): OkHttp框架源码解析
  15. 小T牛 绿色版 18.08.0100
  16. 并发连接MySQL
  17. mysql单表删除记录DELETE
  18. C++函数的传值调用&amp;指针调用&amp;引用调用
  19. SAP调用RestfulApi接口接收数据
  20. linux系统部署Java程序获取ip时报Caused by: java.net.UnknownHostException: XXXXXXXXXX: XXXXXXXXXX: Name or service not known

热门文章

  1. markdown文本内跳转
  2. laravel5.5框架中视图间如何共享数据?视图间共享数据的两种方法
  3. html 四种定位含义
  4. Application类-应用程序生命周期
  5. C#操作XML文档
  6. ubuntu 18.04安装qq等应用
  7. 关于spring中请求返回值的json序列化/反序列化问题
  8. Java 之 Properties 集合
  9. Object::connect: No such slot QWidget::
  10. ta和夏天一起来了