唯一可译码.doc
唯一可译码判决准则编程实现
一 判断方法
将码C中所有可能的尾随后缀组成一个集合F,当且仅当集合F中没有包含任一码字,则可判断此码C为唯一可译变长码。如何构成集合F,可以如下进行。首先,观察码C中最短的码字是否是其他码字的前缀。若是,将其所有的可能的尾随后缀排列出。而这些尾随后缀又可能是某些码字的前缀,再将由这些尾随后缀产生的新的尾随后缀列出。然后再观察这些新的尾随后缀是否是某些码字的前缀,再将产生的后缀列出。依次下去,直至没有一个尾随后缀是码字的前缀或没有新的尾随后缀产生为止。这样,首先获得由最短的码字能引起的所有尾随后缀。接着,按照上述步骤将次短的码字、….等等,所有码字可能产生的尾随后缀全部列出。由此,得到由码C的所有可能的尾随后缀组成的集合F。 二 编程要求
已知:信源个数q,码字集合C
输入:码字个数与每个具体的码字在程序具体运行时从键盘输入 输出:判决结果(是否唯一可译)
三 编程实现
编程语言:C++
编程坏境:Microsoft Visual C++ 6.0 四 程序
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
图
开始
输入码字个数n和码
字集合C
是 判断是否为奇
异码
否
否 判断前缀~是否
有后缀
是
构造尾随后缀集合F
是 F是否存在元素
为C中码字
否
是 F与C是否有相同
前缀
否
输出不是唯一可输出是唯一可译
译码 码
结束
五 验证
1 奇异码
C={1,1,11,10,0100,01} 程序运行结果:
2 不是唯一可译码
C={0,10,1100,1110,1011,1101}
3 唯一可译码
C={1,01,001,0001}