java实现唯一可译码的判别_唯一可译码的判别.doc

该文介绍了如何利用Java设计唯一可译码的判别算法。通过构建码字集合并检查是否存在前缀关系,来判断编码是否为唯一可译码。文中详细阐述了算法设计、分析和程序实现,并给出了测试案例。
摘要由CSDN通过智能技术生成

唯一可译码的判别

信息论与编码技术课程设计(论文)设计(论文)题目唯一可译码的判别管理科学学院专业名称信息与计算科学学生姓名曹昌杰学生学号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月.

附录:源程序清单

#include

#include

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;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;i

{

for(j=0;j

{

if(i==j&&p==0)continue;

if(s[0].len[i]>=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值