目录
一、字母编码
用位串来编码英语字母表里的字母(其中不区分小写和大写字母)。我们可以得出如下几点
- 我们需用长度为5的位串来表示每个字母(这样才能确保每个字母都可以表示出来)
- 当我们需要保存一段文字时,我们需要5*字母个数个位串来存储数据
当我们想输入“eat”时,我需要用15位来保存该数据
当我们想输入“I am a freshman”时,我们需要用60位(这里我们暂且忽略空格)来保存该数据
当我们想输入更多数据时,我们需用更多位来保存
那么有没有什么办法可以节约空间呢 ?
二、树:
1.前缀码
一个简单的二叉树就可以实现空间的节约,如图所示:
上图就是标准的前缀码编码:
- 若我们想表示eat,则可以用010110表示,比上述编码少占用9位 0-e 10-a 110-t
- 若我们想表示neat,则可以用1110010110表示
2.缺陷
前缀码的编码原则:
较短的位串用来编码出现较频繁的字母,较长的位串用来编码不经常出现的字母
而我们常见的编码都是有默认规则的(以下是举例,以实际为准)
但是前缀码的规则,因人而异,因专业而异,不同的受众人群会有不同的使用习惯,这就导致了可能两个人的前缀码编码完全不一样:
对于甲来说:010110表示eat
对于乙来说:010110表示fgi
3.前缀码编码原则
可以从任何二叉树来构造一个前缀码,其中每个内点的
左孩子都用0标记
右孩子都用1标记
树叶都用字符标记
以上就是前缀码的知识,希望对您有所帮助,如有遗漏或不足,欢迎和作者讨论!!