25岁最适合用的眼霜:一步一步写算法(之哈夫曼树 上)
来源:百度文库 编辑:偶看新闻 时间:2024/04/27 14:58:52
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
在数据传输的过程当中,我们总是希望用尽可能少的带宽传输更多的数据,哈夫曼就是其中的一种较少带宽传输的方法。哈夫曼的基本思想不复杂,那就是对于出现频率高的数据用短字节表示,对于频率比较低得数据用长字节表示。
比如说,现在有4个数据需要传输,分别为A、B、C、D,所以一般来说,如果此时没有考虑四个数据出现的概率,那么我们完全可以这么分配,平均长度为2,
view plaincopy to clipboardprint?
- /*
- * A - 00 B - 01
- * C - 10 D - 11
- */
第一步,首先合并A和B,因为A和B是概率最小的
view plaincopy to clipboardprint?
- /*
- *
- * total_1(0.3) C (0.3) D(0.4)
- * / \
- * A(0.1) B(0.2)
- */
view plaincopy to clipboardprint?
- /*
- * total_2 (0.6)
- * / \
- * total_1(0.3) C (0.3) D(0.4)
- * / \
- * A(0.1) B(0.2)
- */
view plaincopy to clipboardprint?
- /*
- * final (1.0)
- * / \
- * D (0.4) total_2 (0.6)
- * / \
- * total_1(0.3) C (0.3)
- * / \
- * A(0.1) B(0.2)
- */
view plaincopy to clipboardprint?
- /*
- * A - 011 B - 010
- * C - 00 D - 1
- */
为了完成整个哈夫曼树的创建,我们还需要定义一个数据结构:
view plaincopy to clipboardprint?
- typedef struct _HUFFMAN_NODE
- {
- char str;
- double frequence;
- int symbol;
- struct _HUFFMAN_NODE* left;
- struct _HUFFMAN_NODE* right;
- struct _HUFFMAN_NODE* parent;
- }HUFFMAN_NODE;
view plaincopy to clipboardprint?
- 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;
- }
【未完,待续】
怎样用NOKIA7270通过数据线让笔记本电脑上(CMWAP)详细一点,最好一步一步
怎样才能把算法写好啊?
写者问题的算法
如何一步一步的提高写公文材料的水平?
w2000要怎么设置上ADSL(请一步一步慢慢说)
大家帮帮忙,写一个算法:建一个哈夫曼树并对其编码
程序调度(时间片轮转算法)用C语言程序怎么写啊??谢谢
程序调度(时间片轮转算法)用C语言程序怎么写啊??谢谢
程序调度(时间片轮转算法)用C语言程序怎么写啊??谢谢
用C语言写一个排序算法。
帮忙 写个算法 用C++语言
crc算法在单片机上的实现
crc算法在单片机上的实现
数学上的“概率”算法怎么计算?
遗传算法在数学上的应用
瓶装的营养快线的百分百中奖,怎么得奖,一步一步写清THS
qq空间开场的FLASH代码什么,谁能一步一步慢慢写清楚 谢 了
设计一个用链表表示的简单选择排序的算法,并实现之(试验报告)
我家没迅雷怎么下载(一步一步说清楚哦)
山市是怎么一步一步变化的(用原句回答)
根号9等于多少?(一步一步的演算出来,谢谢!)
根号5等于多少?(一步一步的演算出来,谢谢!)
根号45等于多少?(一步一步的演算出来,谢谢!)
根号720等于多少?(一步一步的演算出来,谢谢!)