树的应用之——前缀码

目录

一、字母编码

二、树:

1.前缀码

2.缺陷

3.前缀码编码原则


一、字母编码

用位串来编码英语字母表里的字母(其中不区分小写和大写字母)。我们可以得出如下几点

  1. 我们需用长度为5的位串来表示每个字母(这样才能确保每个字母都可以表示出来)
  2. 当我们需要保存一段文字时,我们需要5*字母个数个位串来存储数据

当我们想输入“eat”时,我需要用15位来保存该数据

当我们想输入“I am a freshman”时,我们需要用60位(这里我们暂且忽略空格)来保存该数据

当我们想输入更多数据时,我们需用更多位来保存

那么有没有什么办法可以节约空间呢 ?

     


二、树:

     

1.前缀码

一个简单的二叉树就可以实现空间的节约,如图所示:

上图就是标准的前缀码编码:

  1. 若我们想表示eat,则可以用010110表示,比上述编码少占用9位                                                                                                        0-e        10-a        110-t   
  2. 若我们想表示neat,则可以用1110010110表示

      

        

2.缺陷

前缀码的编码原则:

较短的位串用来编码出现较频繁的字母,较长的位串用来编码不经常出现的字母

而我们常见的编码都是有默认规则的(以下是举例,以实际为准)

但是前缀码的规则,因人而异,因专业而异,不同的受众人群会有不同的使用习惯,这就导致了可能两个人的前缀码编码完全不一样

对于甲来说:010110表示eat

对于乙来说:010110表示fgi

    

3.前缀码编码原则

可以从任何二叉树来构造一个前缀码,其中每个内点的

左孩子都用0标记

右孩子都用1标记

树叶都用字符标记

        

        

以上就是前缀码的知识,希望对您有所帮助,如有遗漏或不足,欢迎和作者讨论!!

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值