📜  关于霍夫曼编码的实践问题

📅  最后修改于: 2021-05-07 18:36:24             🧑  作者: Mango

从GATE的角度来看,霍夫曼编码是一个重要的主题,并且从该主题中提出了不同类型的问题。在理解本文之前,您应该对霍夫曼编码有基本的了解。

这些是基于Huffman编码在GATE中提出的问题类型。

类型1.基于霍夫曼编码的概念性问题–
以下是基于霍夫曼编码的几个关键点:

  • 它是一种无损数据压缩技术,可为不同的符号生成可变长度的代码。
  • 它基于贪婪方法,该方法考虑了字母的频率/概率以生成代码。
  • 它具有nlogn的复杂度,其中n是唯一字符的数量。
  • 字符代码的长度与它出现的频率成反比。
  • 没有代码是另一个代码的前缀,因此,可以明确地将一个代码序列解码为字符。

Que – 1.关于霍夫曼编码,下列哪项是正确的?
(A)在某些情况下,霍夫曼编码可能会变得有损
(B)在某些情况下,霍夫曼代码可能不是最佳的无损代码
(C)在霍夫曼编码中,没有代码是任何其他代码的前缀。
(D)以上全部

解决方案:如上所述,霍夫曼编码是一种无损压缩技术。因此,选项(A)和(B)为假。选项(C)是正确的,因为这是从给定代码解码消息的基础。

类型2。要查找用于编码给定消息的位数–
要解决此类问题:

  • 如果没有给出,首先计算字符的频率
  • 生成霍夫曼树
  • 使用字符的频率和表示这些字符所需的位数计算位数。

队列– 2.编码消息“密西西比”可能需要多少位?

解决方案:以下是“密西西比”中字符的频率表,按频率的降序排列:
11
生成的霍夫曼树为:
xyz(1)

以下是代码:
111
总位数
=频率(m)*代码长度(m)+频率(p)*代码长度(p)+频率(s)*代码长度(s)+频率(i)*代码长度(i)
= 1 * 3 + 2 * 3 + 4 * 2 + 4 * 1 = 21

此外,每个字符的平均位数可以发现为:
所需的总位数/字符总数= 21/11 = 1.909

类型3.从代码到消息的解码–
要解决此类问题:

  • 使用霍夫曼树为每个字符生成代码(如果未给出)
  • 使用前缀匹配,将代码替换为字符。

Que – 3.字符a到h具有基于前8个斐波那契数的一组频率,如下所示:

a : 1, b : 1, c : 2, d : 3, e : 5, f : 8, g : 13, h : 21

使用霍夫曼代码表示字符。与以下代码相对应的字符序列是什么?

110111100111010

(一)fdheg
(b)ecgdf
(C)dchfg
(D)fehdg

解决方案:使用问题中给出的频率,霍夫曼树可以生成为:

以下是代码:
0

使用前缀匹配,给定的字符串可以分解为

110 11110 0 1110 10
f   d     h  e   g

类型4。使用霍夫曼编码保存的位数–

Que – 4.网络公司使用压缩技术对消息进行编码,然后再通过网络进行传输。假设消息包含以下字符及其频率:
00

请注意,输入消息中的每个字符占用1个字节。

如果使用的压缩技术是霍夫曼编码,则消息中将保存多少位?
(A)224
(B)800
(C)576
(D)324

解决方案:在不使用霍夫曼的情况下查找位数,
字符总数=频率总和= 100
1个字符的大小= 1个字节= 8位
总位数= 8 * 100 = 800

使用霍夫曼编码,所需的总位数可以计算为:

5 * 4 + 9 * 4 + 12 * 3 + 13 * 3 + 16 * 3 + 45 * 1 = 224

已保存的位= 800-224 = 576。
xyz(2)