Advertisement

哈夫曼编码 7-1

阅读量:

同样首先先上题目描述

若对一段文本中的字母出现次数进行统计,依据哈夫曼算法可以生成一组编码方案,该方案能够使原文经过压缩后获得最短的总编码长度。然而,哈夫曼编码并非唯一可行的方案。以字符串"aaaxuaxz"为例,其中字母‘a’、‘x’、‘u’、‘z’的出现频率分别为4、2、1、1。此时可以设计多种编码方式,例如 {‘a’=0, ‘x’=10, ‘u’=110, ‘z’=111} 或者 {‘a’=1, ‘x’=01, ‘u’=001, ‘z’=000},亦或是 {‘a’=0, ‘x’=11, ‘u’=100, ‘z’=101}。这三种方式均能将原文压缩至 14 个字节。然而,若采用 {‘a’=0, ‘x’=01, ‘u’=011, ‘z’=001} 这一编码方案,则无法构成哈夫曼编码。因为使用该编码压缩后得到的结果为 00001011001001,在解码时会出现歧义,“aaaxuaxz” 和 “aazuaxax” 均可能被还原为相同内容。因此本题要求判断任意一套给定的编码是否属于哈夫曼编码。

输入格式:
首先输入一个正整数 N(2≤N≤63),随后一行给出 N 个不重复字符及其对应的出现频率,具体格式如下:

c[1] f[1] c[2] f[2] … c[N] f[N]
其中 c[i] 来源于集合{‘0' - '9', 'a' - 'z', 'A' - '

全部评论 (0)

还没有任何评论哟~