赫夫曼树
本帖最后由 砚凉— 于 2017-8-15 11:15 编辑作图:树—>二叉树:兄弟相连,到子结点的连接只留下最左的一条
森林—>二叉树:多了一个根相连
树的路径长度**判断效率
与树结点路径相关的数值——权重
赫夫曼树(二叉树做基础):不断取最小的两个权值结点,权值相加得到上层权值和结点
定长编码:就是使用一定长度的符号编码,如使用8位二进制数进行编码的ASCII码就是最常用的定长编码。
变长编码(类似),前缀码:任一字符编码不是另一字符编码的前缀(例子:二叉树——左子树为0,右子树为1)
根据不同情况变化使用,效果更佳{:7_121:}
赫夫曼树构建:1.建立队列 默认顺序(从小到大排序)
2.将字符编码
3.进行转换过程
队列元素构成:
树的结点-prior指针-next指针//填充队列
for(int k=0;;k<256;k++)
{
if(probability!=0)//出现次数
{
htnode *aux=(htnode *)malloc(sizeof(htnode));
aux->left=NULL;
aux->right=NULL;
aux->symbol=(char)k;//记录字符
addpqueue(&huffmanqueue,aux,probability);//传指针地址,待插入结点,次数
}
}
页:
[1]