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

Huffman算法

 
阅读更多

Huffman算法是一种用来构造最优前缀码(Huffman编码)的贪心算法。Huffman编码是一种被广泛应用而且有效的数据压缩技术,它主要针对字符文件的压缩。

Huffman算法可能产生具有不同编码的最优前缀码,这句话需要这么理解:最优前缀码之所以称为最优是因为它的代价是最小的,但是具有最小代价的编码可能不止一种,而Huffman算法恰恰可以产生多种形式的最优前缀码(代价是相同的)。

Huffman(C)
/* C是待编码的字符集合,|C|=n,对于任意c∈C,c在文件中的出现频度为f(c)。Q是一个最小优先级队列。Q在具体实现时可以考虑采用最小二叉堆。
该算法自底向上地构造一棵最优前缀码所对应的树T*/

n ← |C|
Q ← C
for i ← 1 to n-1
     do 
            allocate a new node z
            left[z] ← x ← Extract-Min(Q)
            right[z] ← y ← Extract-Min(Q)
            f[z] ← f[x] + f[y]
            Insert(Q, z)
return Extract-Min(Q)  // return the root of the tree
            

上面过程所产生的树称为Huffman树,它是一棵满树(树中的每个非叶结点都有两个子结点),满树也是最优编码的充分条件。非叶结点的左枝上编码0,右枝编码1,每个叶子结点的编码是从根结点到该叶子结点的枝上的0、1串构成。

新节点z以x和y分别作为其左右子结点,由于左右的次序是任意的,因而Huffman算法得到的最优前缀码不唯一。Huffman算法的时间复杂度为O(n)。


Huffman算法为什么属于贪心算法?

Huffman树的构建过程实际上是对最小频度的字符的贪心选择上进行的,具有|C|个字符的字符集需要执行|C-1|次合并得到Huffman树,每次合并的时候选择最小频度的两个叶结点(包括合并后新产生的结点),而若用频度表示代价,则在每一步所有可能的合并中,Huffman总是选择一个代价最小的合并,此即为贪心。




分享到:
评论

相关推荐

    Huffman算法的分析与改进

    ### Huffman算法的分析与改进 #### 引言 在当今数据密集型社会中,数据压缩技术扮演着至关重要的角色,特别是在提高数据存储效率和加快数据传输速度方面。Huffman算法,一种基于字符出现频率的自适应编码方法,是...

    数据结构的Huffman算法

    具体实现Huffman算法的源程序,比较适合新学数据结构的人学习。

    huffman算法

    一种应用广泛是算法,虽然简单;但是比较重要

    实验四 Huffman算法(离散数学实验报告).pdf

    《实验四:Huffman算法详解》 Huffman算法,又称为哈夫曼编码,是一种用于数据压缩的高效算法。它的核心思想是构建最优二叉树,即带权路径长度最短的二叉树,以此来生成编码,使得数据在编码后的平均长度最短,从而...

    第8章贪心算法-Huffman算法

    Huffman算法是贪心算法的一个经典应用,主要用于数据压缩,通过构建Huffman树来实现。Huffman编码是一种可变长度的前缀编码,它使得频繁出现的字符拥有较短的编码,不常出现的字符则拥有较长的编码,以此达到压缩...

    Huffman算法的压缩程序(C#实现)

    在C#中实现Huffman算法,首先需要对输入数据进行频度统计,找出出现最频繁的字符。这通常通过创建一个哈希表或字典来完成,其中键是字符,值是对应字符的出现次数。然后,这些字符按照频度排序,形成一个优先队列...

    java实现huffman算法

    java实现huffman算法 ~可以在控制台输入字符串编码~

    数据结构及离散数学的huffman算法c/c++实现

    简单的算法实现,可以实现任意的最优二叉树的生成(生成的二叉树不唯一)

    基于huffman算法的压缩软件

    ### 基于Huffman算法的压缩软件 #### 概述 随着信息技术的快速发展,数据压缩技术成为提高信息处理效率的重要手段之一。特别是在面对大量数据的存储与传输时,有效的压缩算法不仅能节省存储空间,还能加快数据传输...

    基于huffman算法的图像编码 c语言版

    在这个项目中,我们看到的是使用C语言实现的Huffman算法对图像进行编码和解码的过程。 首先,我们需要理解Huffman编码的步骤: 1. **统计字符频率**:对图像文件中的每个像素颜色值(通常是RGB或灰度值)进行统计...

    huffman进行编码,解码根据Huffman算法编写一个对文件进行压缩和解压缩的程序。该程序可以对所有的文件类型进行压缩,压缩之后的文件后缀名为huff。

    哈夫曼编码(Huffman Coding)是一种数据压缩算法,由美国计算机科学家大卫·艾尔文·哈夫曼在1952年提出。这个算法基于一种称为“最优二叉树”或“哈夫曼树”的数据结构。哈夫曼编码的基本思想是利用字符出现频率的...

    编写基于C++ Huffman 算法的无损压缩程序和解压程序【100010816】

    实验目的:编写基于 Huffman 算法的压缩和解压缩程序。你的程序应该能够压缩任意文件,并能无损解压。 实验内容:压缩文件:根据 ASCII 码文件中各 ASCII 字符出现的频率情况创建 Huffman 树,再将各字符对应的...

    多叉树Huffman算法

    ### 多叉树Huffman算法解析 #### 一、引言与背景 哈夫曼编码是一种广泛应用在数据压缩领域的高效编码方法,它是由David A. Huffman于1952年提出的一种变长前缀编码技术。哈夫曼编码的核心思想在于通过对字符出现...

    flash制作的Huffman算法课件

    【标题】"flash制作的Huffman算法课件" 指的是一种利用Adobe Flash CS6软件创作的互动教学资源,旨在讲解Huffman编码这一数据压缩技术。Huffman编码是信息论中的一个基本概念,由David A. Huffman在1952年提出,是一...

    C语言实现Huffman算法的压缩工具

    在C语言中实现Huffman算法,主要涉及到以下几个关键步骤: 1. **字符频率统计**:首先,我们需要对输入的文本或数据流进行字符频率统计。这通常可以通过遍历输入数据,记录每个字符出现的次数来完成。 2. **构建...

    论文研究-基于Huffman算法的DSP处理器指令编码方法.pdf

    许多按照高性能思想设计出的DSP 处理器, 其性能却在应用中得不到很好的发挥。深入分析DSP 处理器的指令编码就会发现, ...在分别讨论、比较了两种方式后, 提出了一种基于Huffman 算法的能够提高编码效率的指令编码方法。

    用于文件压缩的huffman算法.rar

    在这个“用于文件压缩的huffman算法.rar”压缩包中,我们可以期待找到一个C++实现的哈夫曼编码器。 哈夫曼编码的核心思想是为数据中的每个符号(如文本中的字符)分配一个唯一的二进制编码,使得频率高的符号对应较...

    用于文件压缩的huffman算法.zip_huff 压缩_huffman_vc huffman 压缩_压缩算法_文件压缩

    在本压缩包中,"用于文件压缩的huffman算法"可能是包含具体实现细节的文档,如源代码、算法描述或步骤详解。"www.pudn.com.txt"可能是一个示例文本文件,用于演示哈夫曼压缩的效果。开发者使用VC++(Visual C++)这...

Global site tag (gtag.js) - Google Analytics