原贴地址:http://blog.csdn.net/feixiaoxing/article/details/6960990
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
在数据传输的过程当中,我们总是希望用尽可能少的带宽传输更多的数据,哈夫曼就是其中的一种较少带宽传输的方法。哈夫曼的基本思想不复杂,那就是对于出现频率高的数据用短字节表示,对于频率比较低得数据用长字节表示。
比如说,现在有4个数据需要传输,分别为A、B、C、D,所以一般来说,如果此时没有考虑四个数据出现的概率,那么我们完全可以这么分配,平均长度为2,
- /*
- * A - 00 B - 01
- * C - 10 D - 11
- */
第一步,首先合并A和B,因为A和B是概率最小的
- /*
- *
- * total_1(0.3) C (0.3) D(0.4)
- * / \
- * A(0.1) B(0.2)
- */
- /*
- * total_2 (0.6)
- * / \
- * total_1(0.3) C (0.3) D(0.4)
- * / \
- * A(0.1) B(0.2)
- */
- /*
- * final (1.0)
- * / \
- * D (0.4) total_2 (0.6)
- * / \
- * total_1(0.3) C (0.3)
- * / \
- * A(0.1) B(0.2)
- */
- /*
- * A - 011 B - 010
- * C - 00 D - 1
- */
为了完成整个哈夫曼树的创建,我们还需要定义一个数据结构:
- typedef struct _HUFFMAN_NODE
- {
- char str;
- double frequence;
- int symbol;
- struct _HUFFMAN_NODE* left;
- struct _HUFFMAN_NODE* right;
- struct _HUFFMAN_NODE* parent;
- }HUFFMAN_NODE;
- HUFFMAN_NODE* create_new_node(char str, double frq)
- {
- HUFFMAN_NODE* pNode = (HUFFMAN_NODE*)malloc(sizeof(HUFFMAN_NODE));
- assert(NULL != pNode);
- pNode->str = str;
- pNode->frequence = frq;
- pNode->symbol = -1;
- pNode->left = NULL;
- pNode->right = NULL;
- pNode->parent = NULL;
- return pNode;
- }
【未完,待续】