使用霍夫曼树解码算法/实现
Decoding algorithm/implementation using Huffman tree
从如下所示的文本文件开始:
a: 0
b: 100
c: 101
d: 11
0 0 100 100 11 101
所以这将解码:aabbdc
我可以使用什么解码算法来构建霍夫曼树,然后使用它来解码消息?示例代码也将不胜感激!
这是我的想法:
- 创建一个查找表,将每个符号映射到其位
- 创建根节点
- 要构建树,请从编码的每个位中读取
- 如果为 0,则创建左子项。如果为 1,则创建右子项。
- 如果到达空格,请以某种方式指示叶子(空的左右指针(
- 使用我们读取到该空间的位,看看这是查找表
- 在该叶子处插入字符
然后,我可以再次阅读每个位并让它在树上移动。 当它碰到一个空格时,我会在它到达的叶子处返回字符?
输入中没有/不应该有任何空格。你应该得到类似0010010011101
的东西.
要创建树,对于每个字符,从根开始,对于每个位,如果是0
,则向左移动,如果是1
,则向右移动(在需要时创建节点(。当你到达某个字符的末尾时,将我们所在的节点的值设置为该字符。
然后,从树中的根开始遍历输入 - 执行与上述相同的操作,但是,不要创建节点,只需在到达叶子时停止,在该节点处输出值并返回到根。
例:
a = 0
- 只需为根创建一个左子项。
.
/
a
b = 100
- 向右(对于1
(,然后向左(对于0
(,然后再次向左(对于0
(。
.
/
a .
/
.
/
b
c = 101
- 向右走,然后向左走,然后向右走。
.
/
a .
/
.
/
b c
d = 11
- 向右走,然后向右走。
.
/
a .
/
. d
/
b c
处理输入00100
时...
从根源开始。
我们得到一个0
,所以向左走。
我们得到一个值为a
的叶子,所以输出它并回到根。
我们得到一个0
,所以向左走。
我们得到一个叶子,其值是a
,所以输出它并回到根。
我们得到了一个1
,所以向右走。
我们得到一个0
,所以向左走。
我们得到一个0
,所以向左走。
我们得到一个值为b
的叶子,所以输出它并回到根。
相关文章:
- 为什么在此排序算法实现中,向量明显比数组慢?
- 如何检查 CNG Windows API 是否返回符合 FIPS 的算法实现
- 递归合并排序算法实现
- OpenGL:布雷森汉姆的线条绘制算法实现
- 微小加密算法实现会产生意想不到的结果
- 在c++中使用合并排序算法实现计数反转
- 我正在尝试为 Kruskal 算法实现一个C++程序,该程序需要我按权重对图形进行排序。如何按权重对结构进行排序
- 最近点对O(nlogn)算法——c++实现中的一些数据问题
- 算法实现错误(DFS)
- 如何为涉及对象成员、间接寻址和强制转换的排序算法实现lambda函数
- 算法实现与 C++ 和 PHP 进行比较
- 如何仅使用 stl 算法实现此函数
- 三边化(2D)算法实现
- 扩展 Dijkstra 算法实现
- 使用霍夫曼树解码算法/实现
- 弗洛伊德-沃歇尔算法实现的问题
- OpenCV中的自适应算法实现
- 克鲁斯卡尔的算法实现
- 用于选择随机子集的通用算法实现
- 非递归 Kosaraju 的两次传递算法实现需要很长时间才能在大型数据集上执行