Huffman表白季(大话Huffaman编码)
Huffman身为一名成功的码农,1024过去了还单着身,他想打破这一科学道理,因此今天他想对他的梦中情人表白:我爱你,我很爱你,我非常爱你。为了展现他表白的诚意,他想用最快的速度进行表白。
Huffman:在网络传输中字符需要转化为计算机看得懂的东西(就是0和1啦),就是这一串神奇的数字:
11000100001000111100100011000110011110110000011111111000011001100010000100011011111100010001110010001100011001111011000001111111100001100110001000010001100101110101111010111100011100011100100011000110011110110000011000000000010
Huffman打算把这个由227个1或0组成的数字缩短:
1,统计重复出现的数的次数:我出现了3次,爱出现的3次,。出现了1次。Huffman就画出这样一个表,做出了这些积木,每一块积木有字符和他们出现的次数:
出现的字符 |
出现的次数 |
我 |
3 |
爱 |
3 |
你 |
3 |
很 |
1 |
非 |
1 |
常 |
1 |
, |
2 |
。 |
1 |
2,Huffman只会从小到大排序和两个数两个数的相加
Huffman:老规矩,先从小排到大:
出现的字符 |
出现的字数 |
我 |
3 |
爱 |
3 |
你 |
3 |
, |
2 |
很 |
1 |
非 |
1 |
常 |
1 |
。 |
1 |
Huffman:最小的相加:(常+。)=2,拿块2的积木压上去,从小到大排好:
出现的字符 |
出现的字数 |
我 |
3 |
爱 |
3 |
你 |
3 |
, |
2 |
(常+。) |
2 |
很 |
1 |
非 |
1 |
Huffman:最小的相加(很+非)=2,排好序
出现的字符 |
出现的字数 |
我 |
3 |
爱 |
3 |
你 |
3 |
, |
2 |
(常+。) |
2 |
(很+非) |
2 |
Huffman:最小的相加((常+。)+(很+非))=4 排好序:
出现的字符 |
出现的字数 |
(常+。)+(很+非) |
4 |
我 |
3 |
爱 |
3 |
你 |
3 |
, |
2 |
Huffman:忙完了,积木长这样:
Huffman:每个积木的左下那个积木为0,右下那个积木为1,我要标上去记住,不然等下忘了就找不回来了:
Huffman:这样看的话 你就是000,常就是0101,我就是10,写到表里记住:
出现的字符 |
出现的次数 |
积木的位置 |
我 |
3 |
10 |
爱 |
3 |
11 |
你 |
3 |
000 |
很 |
1 |
0110 |
非 |
1 |
0111 |
常 |
1 |
0101 |
, |
2 |
001 |
。 |
1 |
0100 |
Huffman:把我爱你,我很爱你,我非常爱你。这段字按这个表来写的话就短很多了,我就能早一秒表白了:
101100000110011011000001100111010111110000100
Huffman:45个而已,我这么聪明的人怎么可能没人要?这个编码就叫Huffman编码吧,纪念我这么聪明的人,这个表格就叫Huffman编码表把。
粗心Huffman就把这段经过Huffman编码的数字放在底层数据包中发送给他的梦中情人了,但是他忘记把Huffman编码也放在数据包中。
梦中情人QQ邮箱:您收到来自Huffman的一封情书,内容为:°fÁ|
梦中情人:????
Huffman继续单身。。。。。