鱼C论坛

 找回密码
 立即注册
查看: 3104|回复: 0

[学习笔记] 赫夫曼树

[复制链接]
发表于 2017-8-18 09:48:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 砚凉— 于 2017-8-15 11:15 编辑

作图:树—>二叉树:兄弟相连,到子结点的连接只留下最左的一条
森林—>二叉树:多了一个根相连

树的路径长度**判断效率
与树结点路径相关的数值——权重
赫夫曼树(二叉树做基础):不断取最小的两个权值结点,权值相加得到上层权值和结点

定长编码:就是使用一定长度的符号编码,如使用8位二进制数进行编码的ASCII码就是最常用的定长编码。
变长编码(类似),前缀码:任一字符编码不是另一字符编码的前缀(例子:二叉树——左子树为0,右子树为1)
根据不同情况变化使用,效果更佳

赫夫曼树构建:1.建立队列 默认顺序(从小到大排序)
2.将字符编码
3.进行转换过程
队列元素构成:
树的结点-prior指针-next指针
  1. //填充队列
  2. for(int k=0;;k<256;k++)
  3. {
  4.     if(probability[k]!=0)//出现次数
  5.     {
  6.         htnode *aux=(htnode *)malloc(sizeof(htnode));
  7.         aux->left=NULL;
  8.         aux->right=NULL;
  9.         aux->symbol=(char)k;//记录字符
  10.         addpqueue(&huffmanqueue,aux,probability[k]);//传指针地址,待插入结点,次数
  11.     }
  12. }
复制代码


评分

参与人数 1鱼币 +4 收起 理由
小甲鱼 + 4

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 00:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表