唯一可译码尾随后缀判断
肖志勇 2011522127
唯一可译码尾随后缀判断
一. 唯一可译码尾随后缀判别法的编程流程图
二. 编程要求
已知:信源符号个数q ,码字集合C ;
输入:任意码字个数C 与每个具体的码字在程序具体运行时从键盘输入; 输出:判别结果(是否唯一可译码)
三. 程序验证举例
(1) 唯一可译码
C={0,10,1100,1110,1011,1101}
程序运行结果如下图所示
(2) 非唯一可译码
C={110,11,100,00,10}
运行结果如下图所示
四. 编程实现
编程语言种类:C++
运行坏境:Microsoft Visual C++ 6.0(SP6)英文版
运行时方法:打开*.dsw文件,点击链接(build ),然后运行。
五. 程序源代码
/*////////////////////////////////////////
****唯一可译码尾随后缀判别法测试程序*******
*姓名:肖志勇 学号:2011522127*
//////////////////////////////////////*/
#include"weiyikeyima.h"
int main()
{
int Cnt;
cout
cin>>Cnt;
Cp=input(Cp,Cnt);//读取用户输入构造码字集合C
if(!is_singal_code(Cp))//如果是奇异码则一定不是唯一可译码 { if(fc_can_construt(Cp,Cp))//如果可以构成F 集合 { Fp=init_fset(Cp);//构造第一个初始集合F for(;;) { if(fitem_is_setc(Cp,Fp))//判断F 中是否有元素为C 中码字 {
result_output(false);//输出结果,不是唯一可译码 } else {
}
if(fc_can_construt(Cp,Fp)&&!is_repeated)//判断C 和F 是否能够继 Fp=construct_fset(Cp,Fp);//如果可以构造继续构造集合F else result_output(true);//输出判决结果,是唯一可译码,并结束 续构造F 集合 程序
} } } else { } } else { result_output(true);//是唯一可译码,输出结果结束程序 result_output(false);//不是唯一可译码,输出结果并且结束程序。 } return 0;