一、香农码
概念:香农编码是是采用信源符号的累计概率分布函数来分配字码的。香农编码是根据香农第一定理直接得出的,指出了平均码长与信息之间的关系,同时也指出了可以通过编码使平均码长达到极限值。香农第一定理是将原始信源符号转化为新的码符号,使码符号尽量服从等概分布,从而每个码符号所携带的信息量达到最大,进而可以用尽量少的码符号传输信源信息。香农编码属于不等长编码,通常将经常出现的消息变成短码,不经常出现的消息编成长码,从而提高通信效率。香农编码严格意义上来说不是最佳码,它是采用信源符号的累计概率分布函数来分配码字。
编码步骤:
(1)将q个信源符号按概率递减的方法进行排序:P1≥P2≥P3≥……≥Pq
(2)按照-logP(Si)≤Ki≤1-log(Si)(i=1,2,……,q),计算出每个信源符号的码长Ki。
(3)为编成唯一可译码,计算第i个信源符号的累加概率G(i)。
(4)将累加概率转化为二进制表示。
(5)取Gi对应二进制的小数点后Ki位构成该信源符号的二进制码字。
例子:离散无记忆信源P(X)={1/2,1/4,1/64,1/32,1/128,1/8,1/16},对其进行香农编码。
信源符号xi | 符号概率pi | 累加概率Pi | -log(xi) | 码长Ki | 码字 |
X1 | 1/2 | 0 | 1 | 1 | 0 |
X2 | 1/4 | 0.5 | 2 | 2 | 10 |
X3 | 1/8 | 0.75 | 3 | 3 | 110 |
X4 | 1/16 | 0.875 | 4 | 4 | 1110 |
X5 | 1/32 | 0.938 | 5 | 5 | 11110 |
X6 | 1/64 | 0.969 | 6 | 6 | 111110 |
X7 | 1/128 | 0.984 | 7 | 7 | 1111110 |
香农编码的优点:
•可以有效减少信息传输量,提高数据传输效率。
•适用于各种类型的数据传输和储存。
•编码长度是最优的,不会存在浪费的情况。
香农编码的局限性:
•编码需要先知道所有的符号频率,这在一些情况下是不可能的,比如实时流媒体数据。
•编码需要在大量数据的基础上进行,小量数据的编码效果并不明显。
•对于不均等的符号分布,香农编码可能会产生大量无效的编码。
香农编码的应用:
•数据压缩:通过使用香农编码,可以将数据压缩到最小,减少储存和传输成本。
•通信协议:在各种通信协议中,如Wi-Fi、4G、5G等,都使用了香农编码来提高数据传输效率。
•数据库设计:在数据库设计中使用香农编码,可以提高数据查询效率和储存效率。
二、哈夫曼编码
哈夫曼编码(Huffman coding)是一种用于数据压缩的算法。基本思想是通过依据字符频率构建树,通过从根节点到该字符所在叶子节点的路径上的0(左)和1(右)来表示该字符的编码。霍夫曼的编法并不唯一。每次对缩减信源两个概率最小的符号分配“0”和“1”码元是任意的,所以可得到不同的码字,它们之间没有本质区别,但是码的质量不相等,可用码方差表示。
编码方法:
1.统计字符出现的频率
2.将信源消息符号按其出现的概率大小依次排列
3.取两个概率最小的字母分别配以 0 和 1 两码元, 并将这两个概率相加作为一个新字母的概率, 与未分配的二进 符号的字母重新排队。
4.对重排后的两个概率最小符号重复步骤(2)的过程。
5.不断继续上述过程,直到最后两个符号配以 0 和 1 为止
6.从最后一级开始,向前返回得到各个信源符号所对应的码元序列, 即相应的码字。
平均码长
效率
例如
霍夫曼编码是一种具有以下优点的有效压缩编码方法:
优点:
1.高效的压缩率:霍夫曼编码根据字符出现的频率分配编码长度实现较高的压缩率,相较于等长编码幅减少编码长度,节省存储空间。
2.无歧义性:霍夫曼编码通过构建前缀码,确保没有编码是其他编码的前缀,这意味着解码时不会产生歧义,解码过程可靠且准确。
3.前缀码树结构简单:结构简单清晰,容易实现编码和解码的过程。
缺点:
1.需要事先知道字符出现的频率:如果频率信息不准确或者无法获取,可能会导致编码效果不佳。
2.编码和解码的开销较大:在编码和解码过程中,可能需要耗费一定的时间和计算资源。对于较长的文本或大量的数据,编码和解码的开销可能会增加。
3.不适用于小数据集:针对较小的数据集,由于频率分布较为平均,有可能变得更长。因此,在处理小规模的数据集时,使用霍夫曼编码可能不划算。
在合适的应用场景下,霍夫曼编码是一种有效的压缩编码方法。
三、费诺编码
概念 : 费诺码即‘’香农-范诺编码‘’(Shannon–Fano coding)是一种基于一组符号集及其出现的或然率(估量或测量所得)构建前缀码的技术,它是一种无失真信源编码方法,由Ralph Fano 于1949年在香农的"A Mathematical Theory of Communication" (1948)文章基础上提出。它属于概率匹配编码,但一般也不是最佳的编码方法,只有当信源的概率分布呈现
分布形式的条件下,才能达到最佳码的性能 。
编码方法
1.将信源消息符号按其出现的概率大小依次排列。
2.将依次排列的信源符号按概率值分为两大组,使两个组的概率之和近似相同,并对各组赋予一个二进制码元“0”和“1”。
3.将每一大组的信源符号再分为两组,使划分后的两个组的概率之和近似相同,并对各组赋予一个二进制符号“0”和“1”。
4.如此重复,直至每个组只剩下一个信源符号为止。
5.信源符号所对应的码字即为费诺码。
例如
[优点]:该编码考虑了信源的统计特性,使概率较大的信源符号能对应码长较短的码字,较之香农编码一定提升了编码效率。
[缺点]:它不一定是最佳码。当信源符号较多时,有一些符号概率比较接近,使分组变多码长也随之增加,编码过程复杂,有时短码未必能得到充分利用。
四、三者比较
三种编码都考虑'了信源的统计特性,使经常出现的信源符号对应较短的码字,使平均码长缩短,实现了信源压缩。
香农码有唯一的编码, 但编码效率不是很高。
费诺码和哈夫曼码的编码方法都不唯一
费诺码比较适合于对分组概率相等或接近的信源编码。
哈夫曼码对信源的统计特性没有特殊要求,编码效率比较高,对编码设备的要求也比较简单,因此综合性能优于香农码和费诺码。