哈夫曼编码算法思想总结
2015-07-12 21:33
218 查看
1构建哈夫曼树。
(利用队列的数据结构,不断获取最小的两个,退出队列并使之成为新节点的左右子树。然后将新节点插入队列。如此循环……)
根据用户输入的字符串,统计每个字符出现次数。设置权重。建立队列。队列中的节点是二叉树的节点(有左指针,和右指针)。
建新的结点,左右指针指向队列的最后两个(那两个退出队列)。然后插入队列。如此循环,就可以建立哈夫曼树。
2为每个字符编码。
节点的左为0,右为1。
3有了编码列表就可以将用户输入的字符串转化为编码。
或者将编码转化为字符串。
功能简单,不赘述。
(利用队列的数据结构,不断获取最小的两个,退出队列并使之成为新节点的左右子树。然后将新节点插入队列。如此循环……)
根据用户输入的字符串,统计每个字符出现次数。设置权重。建立队列。队列中的节点是二叉树的节点(有左指针,和右指针)。
建新的结点,左右指针指向队列的最后两个(那两个退出队列)。然后插入队列。如此循环,就可以建立哈夫曼树。
2为每个字符编码。
节点的左为0,右为1。
code(*node) { //叶节点 如果(node->left==null && node->right==null) { 将编码填入table编码列表 } 如果(node->left!= null) { node->left的编码 = node的编码+'0'; 将左子树填入table编码列表 } 如果(node->right!= null) { node->right的编码 = node的编码+'1'; //递归右子树 code(node->right); } }
3有了编码列表就可以将用户输入的字符串转化为编码。
或者将编码转化为字符串。
功能简单,不赘述。
相关文章推荐
- bzoj1146: [CTSC2008]网络管理Network 树套树
- SOCKET编程
- 临时数据的存储
- c# ListBox绑定对象时删除数据的问题
- win7下python执行cmd命令中exe崩溃的处理
- Netty系列之Netty百万级推送服务设计要点
- linux块设备驱动之请求过程剖析
- 算法二之子集和数问题
- Cocos2d-x发展---更改父的颜色、透明度的子节点上
- STM32 Printf函数实现方法 (转载)
- ulimit关于系统连接数的优化
- 喵哈哈村的挑衅(区间DP)
- linux shenll 远程执行本地脚本或者执行命令
- maven 忽略checkstyle
- PAT 数据结构 04-树9. Path in a Heap (25)
- 【spring学习前奏】JavaBean内省Introspector以及BeanInfo
- 您是微信“环”么
- bzoj2179: FFT快速傅立叶 FFT裸题
- setCompoundDrawables和setCompoundDrawablesWithIntrinsicBounds区别
- 重采样---不平衡分类