n 元霍夫曼模板算法






2.40/5 (8投票s)
2002年11月12日
1分钟阅读

63555
该算法允许任何类型的权重(成本、频率),包括非数值权重。
引言
网页
http://alexvn.freeservers.com/s1/huffman_template_algorithm.html
下载
http://www.simtel.net/pub/pd/60300.shtml
http://home.barak-online.net/alexvn/s2/hf/hufnta22.zip
该算法允许任何类型的权重(成本、频率),包括非数值权重。使用 {0, 1, ..., n-1} 字母表来编码消息。构建的树是n元树。
该算法基于一组模板类
- Cell(SYMBOL, WEIGHT),
- Node(SYMBOL, WEIGHT),
- InternalNode(SYMBOL, WEIGHT),
- TerminalNode(SYMBOL, WEIGHT),
- BasicHuffmanTree(SYMBOL, WEIGHT, ARY),
- LoadedHuffmanTree(SYMBOL, WEIGHT, ARITY),
- DriedHuffmanTree(WEIGHT, ARITY).
用户应该只使用 LoadedHuffmanTree 和/或 DriedHuffmanTree 类。
LoadedHuffmanTree 需要(作为输入数据)符号及其权重。
DriedHuffmanTree 需要(作为输入数据)仅权重。
该程序包含以下测试
* 从包含 char 符号和 int 权重的向量数据创建加载的 5 元哈夫曼树;
* 从包含 char 符号和 int 权重的向量数据创建加载的 24 元哈夫曼树;
* 从包含 char 符号和 int 权重的向量数据创建加载的二进制哈夫曼树;
* 从包含 int 权重(斐波那契数列)的向量数据创建卸载的二进制哈夫曼树;
* 从包含 int 权重的文本文件创建卸载的二进制哈夫曼树;
* 从包含 char 符号和 int 权重的文本文件创建加载的二进制哈夫曼树;
* 从包含 string 符号和 float 权重的向量数据创建加载的二进制哈夫曼树;
* 从包含 AAA 符号和 BBB 权重的向量数据创建加载的二进制哈夫曼树;
* 使用 5 元哈夫曼树编码和解码向量消息;
* 使用 5 元哈夫曼树编码和解码字符串消息;
* 使用二进制哈夫曼树编码和解码向量消息;
* 使用二进制哈夫曼树编码和解码字符串消息
源代码
http://groups.google.com/groups?th=f9bb13f7426e888c
原始运行日志(演示)
http://groups.google.com/groups?th=7daf90d4f66a47ad