首页 > 其他分享 >4月12日数据结构,线索二叉树,哈夫曼树,哈夫曼编码

4月12日数据结构,线索二叉树,哈夫曼树,哈夫曼编码

时间:2023-04-12 21:23:19浏览次数:37  
标签:12 优先级 哈夫曼 队列 二叉树 权值 节点

线索二叉树与以往的二叉树略有不同,普通二叉树在访问到叶子结点的时候会返回,往往递归的效率并不高,有时还可能有栈溢出的风险,但是线索二叉树在访问到叶子结点的时候因为没有左右孩子,所以他左边存放他前驱的指针。右边存放后继的指针,是指从一个非线性结构变成了一个可以线性访问的的结构,特别是在中许下直接找到他的前驱和后继,

哈夫曼树和哈夫曼编码,以一个由纯字符的文档为例子。这篇文档中每个英文字母出现的次数一定不一样,高频字符出现的次数多,低频字符出现的次数少,于是我们称每个字符出现的频率为为这个字符的权值。将每个字符的权值作为树的根节点构成一片森林,每次取其中两个权值最小的树将他们的和作为根节点重新生成一个有三个结点的树,并将它再次放入森林,再次进行这样的操作,直到只有一棵树为止,那么这颗树的叶子节点的分别对应每个字母,且权值大的越靠近根节点,之后从根节点开始像叶子节点向根节点追踪,若规定从此节点的左结点经过此节点,则此数加一位零,若是右节点则加一位一,当所有叶子节点都经过此操作时,每位字母都会有对应的编码,且权值越高的子字母编码位数越少,以此可以压缩数据的量。

紧接着昨天的优先级队列的实现,优先级队列与普通的栈和队列都有着适配器的作用,但是他的入队列与出队列又有所不同。因为要保持按优先级出队列,就得对插入的数据进行操作,当他不断插入的过程也是不断建堆的过程,比如若队列为大数优先级那么他其中的结构也就是一个大堆,每当尾插数据的时候,就会对这个数据在堆里进行向上调整,将这个数据放到他应有的位置,若要出数据,如果直接将大数输出,那这个堆就会损坏,若要重新建堆时间复杂度就会是o(n),这将大大减小处理数据的效率,于是我们可以将最后一个数与堆顶的数据互换,然后输出队尾的数据,这样只需要再做一次时间复杂度为0(logn)的向下调整就可以又重新生成一个堆,于是就实现了优先级输出,具体代码:

其中再写代码时有一个需要注意的地方,就是当判断左右孩子时,需要判断右孩子是否会越界,不然就崩溃了。

 

标签:12,优先级,哈夫曼,队列,二叉树,权值,节点
From: https://www.cnblogs.com/qjwxlj/p/17311312.html

相关文章

  • 2023.4.12
    将变量进行循环利用使得程序更加简单有序,运行报错时也更方便查找错误 ......
  • 4.12总结
    一、String:字符串类型,可以定义字符串变量指向字符串对象。String变量每次的修改其实都是产生并指向新的字符串对象,原来的字符串对象是没有改变的,所以称为不可变字符串。1.String创建对象的两种方式。方式一:String="传智教育";方式二:publicString()通过String类的构造器创建......
  • 2023/04/12每日总结
    今天复习MVC模式和Servlet相关知识  ......
  • 4.12今日总结
    今天学习了Qt的登录注册页面的跳转fromPyQt5.QtCoreimportQtfromPyQt5.QtWidgetsimportQApplication,QWidget,QLabel,QLineEdit,QPushButton,QVBoxLayout,QHBoxLayout,QMessageBoxclassLogin(QWidget):def__init__(self):super().__init__()......
  • 二叉树的前、中、后序遍历以及查找-Java实现
    对于遍历不过多的赘述,关于查找有关的思想,关键是如何实现查找的顺序以及结果的回传;附代码1packagedataSrtuct;23publicclassBinaryTreeDemo{4publicstaticvoidmain(String[]args){5BinaryTreebinaryTree=newBinaryTree();6......
  • 20230412-Python-pycharm使用技巧
     1.新建文件,自动生成代码       2.自动补齐自定义段落        3.修改注释颜色        ......
  • 4.12趣味百题第六题
    一问题描述   用牛顿迭代法。牛顿迭代法x=x0-f(x0)/f'(x0),迭代到|x-x0|<=10^-5.方程ax*x*x+b*x*x+c*x+d=0;系数a,b,c,d由主函数输入.求x在1附近的一个根并输出。二设计思路1.设置一个在1附近的x0;2.利用do-while迭代法求x.三流程图四伪代码intx,x0=2inta,......
  • 2023年4.12软工日报
    今天下午实现了安卓从服务器中下载。  ......
  • 2023.4.12学习随笔:学贪心学到数组循环
    代码随想录(programmercarl.com)在做这个题时候发现数组循环%没看懂,就开始琢磨这一点,查了很多资料都没有讲,可能是这个知识比较基础(嘿嘿我基础太差了)慢慢来吧~ 编程的时候,很多时候都会要求一个数在某一个范围内进行反复循环,0~100循环,0~5循环等等。一般的方法是使用if语句,当判断......
  • 繁星队4.12团队项目计划会议
    下午两点召开了本团队项目计划会议,由队长进行了智能建立解析系统的页面,基本功能和数据库的展示,讨论了完整系统的功能,确定了团队计划backlog,制定了任务索引卡,进行了工作认领和时间估计。会议视频:https://www.bilibili.com/video/BV1oj411c7L4/?buvid=XUED062ED9D795F27DFBBCF5DA70......