`
javasee
  • 浏览: 924355 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

一步一步写算法(之哈夫曼树 下)

阅读更多

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】


前面说到了哈夫曼树的创建,那下面一个重要的环节就是哈夫曼树的排序问题。但是由于排序的内容是数据结构,因此形式上说,我们需要采用通用数据排序算法,这在我之前的博客里面已经涉及到了(通用算法设计)。所以,我们所要做的就是编写compare和swap两个函数。通用冒泡代码如下所示,

compare和swap代码如下所示,

有了创建函数和排序函数,那么哈夫曼树就可以创建了,

上面的代码完整了写出了huffman树的创建过程,那么我们怎么知道符号的编码是多少呢?这其实不难,因为根节点都知道了,我们只要按照自下而上的顺序遍历节点就可以打印出编码,只不过编码是逆序的而已,

如果对代码本身还有怀疑,可以编译一个测试用例验证一下,


总结:

(1)哈夫曼树不复杂,如果手算可以成功,那么编程应该也没有什么问题

(2)复杂算法都是由小算法搭积木而成的,朋友们应该在基本算法上打下坚实的基础

(3)算法注意复用,这里就用到了原来讲到的通用算法内容





分享到:
评论

相关推荐

    哈夫曼树算法.zip

    贪心算法:贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法。常见的贪心算法包括最小生成树算法中的Prim算法、Dijkstra算法等。 字符串匹配算法:字符串匹配算法用于在一个字符串(文本)中查找一个...

    哈夫曼树的压缩程序及其效果

    然后,根据频率进行排序,现在,构造哈夫曼树,获取每个ASCII码对应的位序列,构造哈夫曼树,将所有的节点放到一个队列中,用一个节点替换两个频率最低的节点,新节点的频率就是这两个节点的频率之和。这样,新节点...

    Huffman 编码图像无损压缩和解压缩 Python示例代码 哈夫曼编码

    Huffman 编码是一种基于字符出现频率构建相应前缀码的无损数据压缩算法。 使用方法: 1. 需要安装 OpenCV 和 Numpy 库: pip install opencv-python numpy 2. 直接运行 main.py 脚本即可使用。 压缩原理: 1. 统计...

    数据结构实验 哈弗曼树及其编码译码

    对于哈夫曼算法: 首先统计信源中各符号出现的概率,按符号出现的概率从大到小排序; 把最小的两个概率相加合并成新的概率,与剩余的概率组成新的概率集合; 对新的概率集合重新排序,再次把其中最小的两个概率...

    贪心算法概述及应用.pdf

    这种算法通常用于求解最优化问题,如最小生成树、哈夫曼编码、背包问题等。 贪心算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不考虑各种可能的整体情况,省去了为找最优解要穷尽...

    c.zip_flex

    本次试验的主要要点是哈夫曼树的建立过程,这种算法的思路是: 1)依据给定的n个权值{W0,W1,……,Wn-1}构造n棵只有一个根结点的二叉树,这些二叉树组成一个森林F={T0,T1,……,Tn-1}。 2)在森林F中选取两棵根...

    数据结构与算法.xmind

    哈夫曼树 哈夫曼编码 二叉搜索树 AVL树 平衡二叉树 红黑树 多叉树 B树 查找节点 插入节点 删除节点 左旋 B+树 查找节点 插入节点 删除节点 图 分类 ...

    基于C++、文件操作和Huffman算法实现图片压缩源码+使用说明+详细注释+sln解决方案.zip

    2. 利用上述哈夫曼树产生的哈夫曼编码对图片文件进行压缩。 3. 压缩后的文件与原图片文件同名,加上后缀.huf(保留原后缀),如pic.bmp 压缩后pic.bmp.huf ## 3.分析与设计 使用Huffman算法实现图片压缩程序,可...

    [详细完整版]数据结构练习.doc

    二、读程序题 阅读下列程序,并写出其运行结果。 1. Void P(int w) { If(w>0) { ... 分别用Prim算法和Kruskal算法求解出下图的最小生成树,在空内填写每一步所加入的 边的两个顶点,如Prim算法第一步加入的边的两个顶点

    数据结构(C++)有关练习题

    3、从终端读入字符集大小为n(即字符的个数),逐一输入n个字符和相应的n个权值(即字符出现的频度),建立哈夫曼树,进行编码并且输出。 注:可用C或C++编写。 4、用邻接矩阵或邻接图实现一个有向图的...

    C语言通用范例开发金典.part2.rar

    范例1-71 树的二叉链表存储的基本操作 193 ∷相关函数:LevelOrderTraverse函数 1.4.18 二叉树的三叉链表存储的基本操作 201 范例1-72 二叉树的三叉链表存储表示 201 ∷相关函数:CreateBiTree函数 1.4.19 ...

    C语言通用范例开发金典.part1.rar

    范例1-71 树的二叉链表存储的基本操作 193 ∷相关函数:LevelOrderTraverse函数 1.4.18 二叉树的三叉链表存储的基本操作 201 范例1-72 二叉树的三叉链表存储表示 201 ∷相关函数:CreateBiTree函数 1.4.19 ...

    C 开发金典

    范例1-71 树的二叉链表存储的基本操作 193 ∷相关函数:LevelOrderTraverse函数 1.4.18 二叉树的三叉链表存储的基本操作 201 范例1-72 二叉树的三叉链表存储表示 201 ∷相关函数:CreateBiTree函数 1.4.19 ...

Global site tag (gtag.js) - Google Analytics