砚凉— 发表于 2017-8-18 09:48:57

赫夫曼树

本帖最后由 砚凉— 于 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]
查看完整版本: 赫夫曼树