霍夫曼树以及哈夫曼编码
一、什么是哈夫曼树与哈夫曼编码
- 编码是什么
答:
在ASCII 编码中
‘a’ = 97 = ( 01100001 ) 2 (01100001)_2 (01100001)2
‘0’ = 48 = ( 00110000 ) 2 (00110000)_2 (00110000)2
注意:任何信息,在计算机中,都是二进制存储的
ASCII编码规则下的信息:“aa00” = 0110 0001、01100001、00110000、00110000
信息的价值在于流通,从一台计算机 传输到 另外一台计算机,传输上面信息,需要传输32个比特位
假设:计算机的网络带宽是32bit/s, 传上述信息,用时:1s在特定场景中:假设需要传输的只有a,b,0,1四种字符需要传输
重新编排编码a:00, b:01, 0:10, 1:11
自定义规则下的信息“aa00” = 00 00 10 10
在带宽不变的情况下,当前只需要传输0.25s
在相同传输的数据量下,越好的编码方式,传输的效率越快 -> (各个直播平台相同网络下,流畅度的区别)
- 定长与变长编码
- ASCII 编码和刚刚特定场景下的编码,都属于定长编码
- 对于每一种字符,编码长度相同,这就是定长编码
- UTF-8编码,是变长编码,UTF-16,是定长编码
- 对于每一个字符,编码长度不相同,这就是变长编码
- 将定长编码,看成时变长编码的特例
- 变长编码,一定不差于定长编码
变长编码应用场景
特定场景:
- 只有四种字符:ab01
- P(a) = 0.8, P(b) = 0.05, P© = 0.1, P(1) = 0.05
平均编码长度:
l i l_i li:第i中字符,编码长度
p i p_i pi:第i中字符,出现概率
a v g ( l ) = ∑ l i × p i avg(l) = \sum{l_i}\times{p_i} avg(l)=∑li×pi假设,平均编码长度:1.16,估算传输100个字符,需要传输116个比特位
上述编码的平均编码长度: a v g ( l ) = 2 ∗ ∑ p i = 2 avg(l) = 2 * \sum{p_i} = 2 avg(l)=2∗∑pi=2
新建编码:出现概率大的编码长度短,出现概率小的编码长度长
新·编码 a : 1 b : 01 0:000 1:001 (问题1:为什么b的编码不能时‘10’)
平均编码长度: 1 ∗ 0.8 + 2 ∗ 0.05 + 3