编码,字符映射到二进制序列
解码,二进制序列还原成对应的字符
压缩(有损/无损),用较少的01序列描述原始信息
ASCLL编码,将字母、数字和一些常用的符号用一个字节编码
eg:ASCII编码:“A”-01000001,十六进制:0x41
GBK/GB2,针对简体字的编码,每个汉字用两个字节编码
GBK,”算“——CBE3, ”法“——B7A8
Unicode
UTF-8
定长编码A、B、C、D
不定长编码(频率高字符用较短的编码)
前缀码问题
编码效率:编码总长度÷字符数
问题:给定符号计和S={S1,S2,…,Sn},每个符号频次f={f1,f2,…,fn},设及一套符号编码(变长),sigma fi×Li极小化
以上哪个编码方式效率最高?答案是显而易见的[/滑稽]
哈夫曼编码树(Huffman)
东山放
设A,B,C三个字符出现的频次分别为3,2,1
Huffman算法:自下而上构建最优二叉编码树
Haffman编码算法描述:
重复以下过程:
1、创建Huffman树节点:
选频数最小的两个节点i,j,创建其父节点k,fk=fi+fj
2、调整频率集合:
添加新建父节点的频率fk,删除两个子节点频率fi,fj
哈夫曼编码是最优编码,但不唯一
贪心策略
每一步都采取当前最好的选择从而希望达到全局的最优解,贪心策略并不每次都得到最优解