- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
唯一可译码的判别汇编
信息论与编码技术 课程设计(论文) 设计(论文)题目 唯一可译码的判别 管理科学学院 专业名称 信息与计算科学 学生姓名 曹昌杰 学生学号 201307020102 指导教师 乐千桤 设计(论文)成绩
教务处 制
2015 年 12 月 12 日
唯一可译码的判别0为原始码字的集合再构造一系列集合1,S2,…为得到集合1,首先考察0中所有的码字若码字ωωi的前缀即ωiωjA,则将后缀1中的元素1是由所有具有这种性质的0中拿出一个元素看有没有一个码字是另一个码字的前缀这种情况如果有就将后缀放入更新的集合中直到更新的集合为空集为止一种码是唯一可译码的充要条件是1,S2,…中没有一个含有0中的码字第1章 前 言
1.1内容及要求(或课题背景)
对于用户输入指定的编码个数及编码,判断出输入的码为唯一可译码。
1.2 本文研究思路及结构安排
设计判定唯一可译码的思路如下:
1)、考察0中所有的码字。若码字ωωi的前缀,即ωiωjA,则将后缀1中的元素构造1。
2)、从新产生的集合中拿出一个元素,从原始集合S0中拿出一个元素找有没有一个码字是另一个码字的前缀这种情况如果有就将后缀放入更新的集合中
3)、如此构造的S1,S2,…集合中没有一个含有0中的码字此编码即为唯一可译码否则该编码不是唯一可译码第2章 相关理论知识
唯一可译码充要判定条件:设S0为原始码字的集合,再构造一系列集合1,2,…为得到集合1,首先考察0中所有的码字。若码字ωωi的前缀,即ωi=ωA,则将后缀1中的元素,1是由所有具有这种性质的0中拿出一个元素,看有没有一个码字是另一个码字的前缀这种情况,如果有就将后缀放入更新的集合中,直到更新的集合为空集为止,若1,2,…中没有一个含有0中的码字,则为唯一可译码。第3章 算法设计与分析
1)、虽然编码为数字编码,但如“001”、“010”类型的编码不能使用int类型数组进行存储,因为编码为字符串类型,尝试用二维字符数组去存储它们,考虑到还有字符串长度等变量,可以使用一个Code的结构体去存储。
2)进行判断的第一步,首先考虑S0内部若码字ωωi的前缀,即ωiωjA,则将后缀1中的元素构造1。否则,可以直接判定该编码为唯一可译码。
3)从新产生的集合中拿出一个元素,从原始集合S0中拿出一个元素找有没有一个码字是另一个码字的前缀这种情况如果有就将后缀放入更新的集合中
4)、比较构造的S1,S2,…集合中没有一个含有0中的码字此编码即为唯一可译码否则该编码不是唯一可译码第4章 程序实现与测试
程序运行截图如下
输入唯一可译码:01、10、00、11
输入非唯一可译码:00、101、001、100、111、000
第5章 结 论
在定理“对任意的正整数N,如果一种编码方法的N次扩展码都是非奇异的,则该编码方法就是唯一可译码”对唯一可译码的判定显然在实际应用中很难发挥作用,因为不可能一一检查所有N次扩展码的奇异性。但可以通过构造后缀集合的方式,在结论“一种码是唯一可译码的充要条件是S1,S2,…集合中没有一个含有0中的码字1,S2,…集合参考文献
[1] /view/c818007201f69e3143329426.html
[2] 姜楠.王健 .北京:清华大学出版社.2010年5月.
附录:源程序清单
#includestdio.h
#includestring.h
struct Code
{
char code[100][10];
int len[100];
int p; //码字或尾缀的个数
};
int main()
{
struct Code s[100],F,C;
int N,i,j,l,t,p;
printf(输入码字的个数: );
scanf(%d,N);
printf(输入编码:);
for(i=0;iN;i++)
{
scanf(%s,s[0].code[i]);
s[0].len[i]=strlen(s[0].code[i]);
}
s[0].p=N;
F.p=0;p=0;
//循环结束条件为新的尾缀和F中的尾缀比较若没有新的尾缀出现
while(1) //使循环一直执行下去,以break形式跳出
{
C.p=0;
s[p+1].p=0;
for(i=0;iN;i++) //判断s[0]中是否有码字是其他码字的前缀
{
for(j=0;js[p].p;j++)
{
if(i==jp==0)continue;
if(s[0].len[i]=s[p].len[j])co
文档评论(0)