傻大方


首页 > 知识库 > >

哈夫曼|哈夫曼编码实验报告( 三 )


按关键词阅读: 报告 实验 编码 哈夫曼


百般无奈之下 , 回归课件 , 将哈夫曼树那一节仔细的看了几遍才看懂了编写哈夫曼树的基本思想 。
程序的重点之一是选择权值最小的两个结点 , 最开始将问题考虑的太过简单 , 使用数字排序的冒泡法之类的就能找到最小的两个结点 , 然后使用完这两个结点后将它们删除掉就可以了 。
但是在实际操作中 , 结点的内容是使用数组的形式存储下来的 , 而数组最麻烦的操作就是在数组中进行插入和删除结点 。
当时怎么也想不到解决的办法 。

15、 。
后来在翻阅C语言的书的时候 , 看到在判断一个数是否为素数的程序中使用了flag标志 , 考虑先将所有的结点的flag标志都赋为0 , 而使用完某个结点后就将它的flag标志改为1 , 这样就不会出现结点被重复使用的现象了 。
后来在网上查找类似的程序中发现了一个更好的办法 , 就是运用结点插入后的本来性质 , 因为在将结点加入到哈夫曼树中 , 它一定会有父亲结点 , 所以先将需要处理的结点的父亲结点全赋予0值 , 而加入到树中后有了父亲结点 , 则父亲结点不再为0 , 可以通过判断parent=0是否成立来判断结点是否被使用过 。
这样在很大程度下简化了程序 。
在构建哈夫曼树的过程中 , 想到每两个最小权值结点的父亲结点是需要另外存储的 , 而最开始 。

16、虽然按照课件上的内容将哈夫曼树的结点数设置成2*n-1个 , 却不知道如何使用 。
最初的想法是在选择出两个结点后将它们重新编号 , 从1开始 , 然后自然而然它们的父亲结点就为3 , 依此类推 。
同样的也是在实际操作中 , 发现这样做真是自己给自己找麻烦 , 不仅容易将原来需要处理的结点搞混 , 重新编号也是一项大工程 。
后来在同学的帮助下 , 发现自己思考的太复杂了 , 可以直接将第一个父亲结点的编号设置为n+1即可 , 因为只有n个结点需要处理 , 后面的m-n个结点都是父亲结点 。
最后一个问题是输出的设置 。
因为是要构建哈夫曼树 , 所以理所当然的认为要输出一个树的结构 , 但是很明显根本不知道要如何实现这一类的操作 , 所以又一次陷入僵局 。
在同学的提 。

【哈夫曼|哈夫曼编码实验报告】17、醒下 , 改换了思维 , 只要能够表示出树的结构就可以了 , 并不一定要将一颗树给画出来 。
而表现出哈夫曼树的结构可以通过它的编码来显示 , 也可以通过输出它的父亲结点和孩子结点来表示 。
好在这两种表示方法都比较容易实现 , 而且实验的目的也是要输出每个结点的哈夫曼编码 , 但是通过父亲结点和孩子结点更能够体现出结点的位置 , 所以输出设置将两种都纳入其中 , 以便使结果更加明显透彻 。
通过这次实验 , 我发现 , 人的思维一定要多元化 , 有时候在某个问题上想到的办法比较难以实现是可以转换一下思想 , 不要刻板的一定要将该办法实现 。
但是我们在执着于一个问题的时候很难转换思想去走另一条路 , 所以一定和多和同学交流 , 多阅读一些通过不同方法来实现同一操作的程序 , 比较一下它们之间的差异 , 了解到每个程序的这样编写的原因和好处 , 发散自己的思维 。
只有这样才能编写出更好的程序 , 使程序能更简单更容易实现 。


来源:(未知)

【学习资料】网址:/a/2021/0318/0021711234.html

标题:哈夫曼|哈夫曼编码实验报告( 三 )


上一篇:小鸟|一只小鸟免费下载

下一篇:大学|大学新学期工作计划(班长、团支书)