| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1846 人关注过本帖
标题:[求助]唯一可译码判决准则问题
只看楼主 加入收藏
喝茶的小k
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2006-7-27
收藏
 问题点数:0 回复次数:1 
[求助]唯一可译码判决准则问题


//这个程序有什么问题?那位大哥能把他变成c语言版的

唯一可译码判决准则:

已知:信源符号个数,码字集合C。
算法:
1. 考查 中所有的码字,若 是 的前缀,则将相应的后缀作为一个尾后缀码放入集合 中;
2. 考查 和 两个集合,若 是   的前缀或 是 的前缀,则将相应的后缀作为尾随后缀码放入集合 中;
3. = 即为码 的尾随后缀集合。
4. 若 中出现了 中的元素,则算法终止,返回假( 不是唯一可译码);否则若 中没有出现新的元素,则返回真。
我真不知道怎么做,想方设法做了一种结果。没有完全按照它的算法做。大体上满足了要求,但是不够精减,没有对可能出现的输入作出相应的处理,请大家帮忙。
import java.util.*;
import javax.swing.JOptionPane;
public class Testlist
{
static boolean flag=true;
//看两个集合是否还要继续比较,加入后缀的标志。
static boolean result=true;
//唯一可译码的标志。
static String cstring=new String();
//用来引用输入的字符。
static ArrayList ccString=new ArrayList();
//用来存储输入的码符号。
static int c; //用来记录输入的信源的个数。
static String endString;//用来引用要加入mylist中的后缀。

// 信源个数的输入,码符号的输入函数。
public static void inputString()
{
ccString.clear();
cstring =JOptionPane.showInputDialog("请输入信源的个数");
c = Integer.parseInt(cstring);

for( int i=0;i<c;i++)
{
cstring=JOptionPane.showInputDialog("请输入码符号");
ccString.add(cstring);
}
JOptionPane.showMessageDialog(null,ccString,"所有的码字是",
JOptionPane.INFORMATION_MESSAGE);
String check=JOptionPane.showInputDialog("所有的码字正确吗?" +
"输入yes or no");
if(check.equals("no"))
{
Testlist.inputString();
}

}

//比较两个字符串,若相等,即不可能是唯一可译码,使result为假。
//若满足前缀关系,则返回后缀。
public static String comparestring(String str1,String str2)
{
String theResult=null;
if(str1.equals(str2))
{
result=false;
}
if(result)
{
if(str1.startsWith(str2))
{
theResult=str1.substring(str2.length(),str1.length());

}
if(str2.startsWith(str1))
{
theResult=str2.substring(str1.length(),str2.length());
}
}
return theResult;
}
//比较两个集合。若有相同的元素,则不是唯一可译码。使result为假。
//若其中有元素满足前缀关系。则提取后缀添加到mylist中。
public static void com(ArrayList a,ArrayList b)
{
flag=false;
String aa;
String bb;
cp2: for(int i=0;i<a.size();i++)
{
for(int j=0;j<b.size();j++)
{
aa=(String)a.get(i);
bb=(String)b.get(j);
endString=comparestring(aa,bb);
if(!result)
{
break cp2;
}
if(endString!=null)
{
if(!b.contains(endString))
{
b.add(endString);
flag=true;
break cp2;
}
}
}
}
if(flag)
{
com(a,b);
}
}
public static void main(String args [])
{
String st1,st2;
//boolean addString=false;
Testlist test=new Testlist();
ArrayList mylist=new ArrayList();
test.inputString();//

cp: for( int m=0;m<test.c;m++)
{
for(int j=m+1;j<test.c;j++)
{
st1=(String)ccString.get(m);
st2=(String)ccString.get(j);
endString= comparestring(st1,st2);
if(!result)
{
break cp;
}
if(endString!=null)
{
/* addString=true;
* for( int k=0;k<mylist.size();k++)
* {
* if(endString.equals(mylist.get(k)))
* {
* addString=false;
* }
* }
* if(addString)
* {
* mylist.add(endString);
* }
*/
if(!mylist.contains(endString))
{
mylist.add(endString);
}
}
}
}
test.com(test.ccString,mylist);
if(result)
{
JOptionPane.showMessageDialog(null,"是唯一可译码。",
"判断是否是唯一可译码",JOptionPane.INFORMATION_MESSAGE);
}
else
{
JOptionPane.showMessageDialog(null,"不是唯一可译码。",
"判断是否是唯一可译码",JOptionPane.INFORMATION_MESSAGE);
}
// System.out.println(mylist);
System.exit(0);
}

}
//测试码可以为:6 {01,111,011,00,010,110}或 7 {a,ac,ad,abb,bad,deb,bbcde}
//the result is yes and not.

搜索更多相关主题的帖子: 译码 准则 判决 
2006-12-27 16:19
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
你发错地方了,你应该发到C区去

可惜不是你,陪我到最后
2006-12-27 16:26
快速回复:[求助]唯一可译码判决准则问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014406 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved