信息论课程设计报告

2019-06-11 16:33

成绩:

教师姓名:

1. 任务说明

2016-2017学年第1学期

《信息论》课程设计

学院名称: 班级学号: 学生姓名:

2016年12月

一、判定唯一可译码

输入:任意的一个码(即已知码字个数及每个具体的码字) 输出:判决结果(是/不是)

输入文件:in1.txt,含至少2组码,每组的结尾为”$”符 输出文件:out1.txt,对每组码的判断结果

说明:为了简化设计,可以假定码字为0,1串

2. 实现原理

判断方法:将码C中所有码字可能的尾随后缀组成一个集合F,当且仅当集合F中没有 包含任一码字,则可判断此码C为唯一可译变长码。

构成集合F:首先观察码C中最短的码字是否是其他码字的前缀。若是,将其所有可能 的尾随后缀排列出。就是将其他码字序列中截去与其最短码字相同的前缀 部分,将余下的序列为尾随后缀。而这些尾随后缀又可能是某些码字的前 缀,或者最短码字又仍是这些尾随后缀的前缀,再将由这些尾随后缀产生 的新的尾随后缀列出。然后再观察这些新的尾随后缀是否是某些码字的前 缀,或观察有否其他码字是这些新的尾随后缀的前缀,再将产生的尾随后 缀列出,依次下去,直至没有一个尾随后缀是码字的前缀或没有新的尾随 后缀产生为止。这样,首先获得的是由最短码字能引起的所有尾随后缀。 接着,按照上述步骤将次短的码字、......所有码字可能产生的尾随后缀前部 列出。由此得到由码C的所有可能的尾随后缀组成的集合F。 参考算法伪代码:

For all Wi,Wj?C do

if Wi是Wj的前缀 then

将相应的后缀作为一个尾随后缀放入集合F0中 End if End for Loop

For all Wi?C do

For all Wj?Fn do

if Wi是Wj的前缀 then

将相应的后缀作为一个尾随后缀放入集合Fn?1中 Else if Wj是Wi的前缀 then

将相应的后缀作为一个尾随后缀放入集合Fn?1中 End if End for End for F??iFi

If ?Wi?F,Wi?C then

Return false

Else if F 中未出现新的元素 then

Return true End if

//能走到这里,说明F中有新的元素出现,需继续

End loop

3. 实现源码

#include #include #include #include usingnamespace std;

#pragmawarning(disable:4996) char c[100][50]; //保存码字 char f[300][50]; //保存尾随后缀

int N, sum = 0; //N为码字的个数,sum为尾随后缀个数 int flag; //判断是否唯一可译标志位

//检测尾随后缀

void patterson(char c[], char d[]) { int i, j, k; for (i = 0;; i++) { If (c[i] == '\\0'&&d[i] == '\\0')//两字符串一样长,跳出 break; if (c[i] == '\\0') //d比c长,将d的尾随后缀放入f中 { for (j = i; d[j] != '\\0'; j++) f[sum][j - i] = d[j]; f[sum][j - i] = '\\0'; for (k = 0; k

if (strcmp(f[sum], f[k]) == 0) /*查看当前生成的尾随后缀在f集合中 是否存在*/ { sum--; break; } } sum++; break; } if (c[i] != d[i])//字符不一样了也退出(前缀不同) break; } }

void main(){ int k = 0, N = 0, m = 0, a[50], z = 0; a[m] = N; m++; fstream file1; file1.open(\); //码字读取 FILE *file; file = fopen(\, \); int num = fgetc(file) - 48; for (int n = 0; n < num; n++){ int i = 0, j; if (fgetc(file) == ' ') N += (fgetc(file) - 48); else N += (fgetc(file) - 48); a[m] = N; m++; fgetc(file); for (k; k < N; k++){ for (int q = 0;; q++){ char temp = fgetc(file); c[k][q] = temp; if (temp == ' ' || temp == '$'){ c[k][q] = '\\0'; break; } } } //生成尾随后缀 flag = 0; for (i = a[z]; i

for (j = i + 1; j


信息论课程设计报告.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:用友T3 - 操作实训资料

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: