一个哈夫曼编码的有趣使用

哈夫曼编码是基于哈夫曼树的一种长度最短的前缀编码。

这里,我不详细讲哈夫曼树与哈夫曼编码的相关知识,说一下自己在学习过程中的一点想法。

我们看影视剧会经常会看到一方给另一方发送了一大串“01”混合的数串,而另一方会根据某种预先设定好的编码表来解密这一串“01”的奥义,这就是哈夫曼编码的使用之一。

至此,我们就会想可以自己设定一串“01”串,这个串中隐含了你想说给他(她)的话,这样通过你喜欢的方式将串传递给ta,让ta慢慢领悟其中的含义。

首先我们先看一道有关哈夫曼编码的习题:

eg.某通信系统有十种字符: ybha-tdrpi,其出现的概率百分比分别为:168219111015964,请完成:

1)构造Huffman树(要求所有结点左孩子的权值不大于右孩子的权值);

2)据此设计出各个字符的Huffman编码;

3)并译出下列报文:111110101111011110000100110111111011111101111101101000。

第(1)题构造哈夫曼树如下:


第(2)题编码表:

字符Huffman编码
y00
b0110
h111110
a10
-010
t1110
d110
r0111
p11110
i111111

第(3)题解密报文:

111110 10 11110 11110 00 010 0110 111111 0111 1110 111110 110 10 00

    h       a     p        p     y     -     b        i         r        t        h       d    a   y

看到此,想必一切都明白了吧,happy-birthday送给你,O(∩_∩)O~

当然,上面这个字符编码是我自己设计的,可以根据需要自行变化,只要你懂得哈夫曼树的构造原理,那么你就可以设计出任何你想要表达的“密文”。

“I love you”、“happy-new-year”

不过好像你发给的对方也得懂点哈夫曼编码的基本知识,不然会是一脸懵逼,什么东东?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值