T42 前缀特性 不等长编码
- 适合保存前缀特性编码的数据结构
- 哈夫曼树: 构建二叉树,叶子结点表示字符,路径表示编码
- 译码过程
- 对于给定
01串,从根结点开始遍历哈夫曼树 - 遇到
0向左子树移动,遇到1向右子树移动 - 到达叶子结点时,输出对应字符,并返回根结点继续译码
- 对于给定
- 判定前缀特性:(构建哈夫曼树的过程)
- 初始二叉树仅含根结点
- 依次读入每条编码,建立编码对应的路径
- 对于给定的编码串,从根结点开始,按照编码的每一位向左子树或右子树移动
- 如果路径上不存在对应的子结点,则创建新的子结点
- 可以遇到三种情况
- 遇到叶结点: 说明存在前缀冲突,不具备前缀特性
- 处理所有位后,均没有创建新结点: 说明存在前缀冲突,不具备前缀特性
- 处理最后一个编码位时,创建了新结点: 说明该编码具备前缀特性
- 判定全部编码均具备前缀特性,则整个编码集具备前缀特性