3 重 庆 大 学 学 生 实 验 报 告 实验课程名称 信息理论基础 开课实验室 学 院 数学与统计 年级 2 0 0 8 专业班 信息2 班 学 生 姓 名吕临颖 学 号 ******** 开 课 时 间 2 0 1 0 至 2 0 1 1 学年第 1 学期 总 成 绩 教师签名 数理学院制 开课学院、实验室: 实验时间 :2010 年 12 月 30 日 实验项目 名 称 唯一可译码的判别准则 实验项目类型 验证 演示 综合 设计 其他 指导教师 李东 成 绩 √ √ √ √ 一.实验目的 (1)进一步熟悉唯一可译码的判别准则; (2)掌握C++语言处理字符串的相关方法。 二.实验内容 (1)已知:信源符号数和码字集合C; (2)输出:输入:任意的一个码,码字的个数和每个具体的码字在运行时从键盘输入 (3)输出:作出判决,若是唯一可译码,返回1,否则返回0; 三.实验原理 根据唯一可译码的判别方法,利用数据结构所学的知识,定义字符串数据类型并利用指针进行编程来实现算法。 算法:1、考察C 中所有的码字,若Wi 是 Wj 的前缀,则将对应的后缀作为一个尾随后缀码放入集合Fi+1 中; 2、考察C 和Fi 俩个集合,若Wi ∈C 是 Wj∈F 的前缀或 Wi ∈F 是 Wj∈C 的前缀,则将相应的后缀作为尾随后缀码放入集合Fi+1 中; 3、F=∪Fi 即为码C 的尾随后缀集合; 4、若F 中出现了 C 中的元素,算法终止,返回假(C 不是唯一可译码);否则若F 中没有出现新的元素,则返回真。 四.实验环境及实验文件存档名 实验环境:visual C++ 6.0 文件名 :唯一可译码判别准则.cpp 五.实验结果及分析 #include #include #include struct strings { char *string; struct strings *next; }; struct strings Fstr, *Fh, *FP; //输出当前集合 void outputstr(strings *str) { do { cout<string<next; }while(str); cout<b?b:a; } inline int MAX(int a, int b) { return a>b?a:b; } #define length_a (strlen(CP)) #define length_b (strlen(tempPtr)) //判断一个码是否在一个码集合中,在则返回 0,不在返回 1 int comparing(strings *st_string,char *code) { while(st_string->next) { st_string=st_string->...