给定一段字符串,如何对字符进行编码,可以使得该字符串的编码存储空间最小?
【例】假设有一段文本,包含58个字符,并由以下7个字符构成:a,e,i,s,t,空格,换行;这7个字符出现的次数不同。如何对这7个字符进行编码,使得总编码空间最少?
【分析】
- 用等长的ASCII编码:58*8=464位
- 用等长3位编码:58*3=174位
- 不等长编码:出现频率高的字符用的编码短些,出现频率低的字符则可以编码长些?
怎么进行不等长编码?
如何避免二义性?
- 前缀码prefix code:任何字符的编码都不是另一字符编码的前缀,即可无二义地decode
用二叉树进行编码:
- 左右分支:0、1
- 字符只在叶结点上
怎么构造一颗编码代价最小的二叉树?
利用哈夫曼树进行编码!!!