(10分)若任一个字符的编码都不是其它字符编码的前缀,则称这种编码具有前缀特性。现有某字符集(字符个数≥2)的不等长编码,每个字符的编码均为二进制的0、1序列,最长为L位,且具有前缀特性。请回答下列问题:
⑴ 哪种数据结构适宜保存上述具有前缀特性的不等长编码?(4分)
⑵ 基于你所设计的数据结构,简述从0/1串到字符串的译码过程。(3分)
⑶ 简述判定某字符集的不等长编码是否具有前缀特性的过程。(3分)
(1)哈夫曼树。
(2)根据哈夫曼树的特性其译码过程为:从左至右依次扫描该0/1串,从根结点开始,若为0则进入左子树,若为1则进入右子树,遇到叶子结点,则保存叶子结点对应的字符,将0/1串的剩余部分从树的根结点开始扫描。重复上述过程直至0/1串遍历完毕。保存的字符串即为0/1串的译码。
(3)判断前缀特性的过程也是构建二叉树的过程,字符集的每一个编码应该对应一条路径。初始时,二叉树仅含有一个根结点,其左右指针为空。依次读入字符集中的编码,每读入一个编码从根结点开始,若为0则沿左指针向下移动,若为1则沿右指针向下移动,当指针指向的下一个结点为空且当前结点未标记,则创建一个结点并标记;若编码至最后一位且指针指向的是非空结点,则不具有前缀特性,返回;若当前编码没有至最后一位且遇到已标记的叶子结点,则不具有前缀特性,返回。当所有编码读入完毕且通过验证则具有前缀性。
解答:
⑴ 题目要求:&ld...
登录后提交答案