📄 serchmax.java
字号:
软件学院 王玉馥(1291403166)03级4班
/*
*查找MaxMotif的函数。
*/
package dataSmall ;
class ChainNodeType {
String str = "";
String attr = ""; //记录在那个串中
ChainNodeType next = null; //指向下一个单词的指针
}
public class Serchmax {
String s[];
double b1,b2,step;
char gen[] = new char[4];
String findresult="";
public Serchmax(String str[],double t1,double t2,double st) {
s=str;
b1=t1;
b2=t2;
step=st;
gen[0] = 'A';
gen[1] = 'C';
gen[2] = 'G';
gen[3] = 'T';
find();
}
public void find() {
ChainNodeType result[] = new ChainNodeType[s[0].length()];
result[0] = new ChainNodeType();
ChainNodeType p=result[0];
for(int n=0;n<4;n++)
{
p.str=p.str+gen[n];
p.next=new ChainNodeType();
p=p.next;
}
double t;
java.text.DecimalFormat df =new java.text.DecimalFormat("#0.00");
for(t=b2;t>=b1;t-=step)
{ findresult+="MaxM(U,"+df.format(t)+")={";
for (int i = 1; i < s[0].length(); i++) {
result[i] = new ChainNodeType();
ChainNodeType q = result[i];
p = result[i - 1];
while (p.next != null) {
String key = "";
for (int k = 0; k < 4; k++) {
//拼字符串
key = p.str + gen[k];
if (fre(key) >= t) {
fill(q, key);
String key2;
int flag = 1; //记录是否为max
//右拼
for (int j = 0; j < 4; j++) {
key2 = key + gen[j];
if (fre(key2) >= t) {
flag = 0;
break;
}
}
//左拼
if (flag == 1) {
for (int j = 0; j < 4; j++) {
key2 = gen[j] + key;
if (fre(key2) >= t) {
flag = 0;
break;
}
}
}
if (flag == 1) {
findresult=findresult+q.str + q.attr + " ";
}
q.next = new ChainNodeType();
q = q.next;
}
}
p = p.next;
}//while
}//i
findresult+="}\n\n";
}//t
//System.out.print(findresult);
}
//查找关键字的频度
double fre(String key) {
double fre = 0;
for (int i = 0; i < s.length; i++) {
if (s[i].indexOf(key) != -1) {
fre++;
}
}
return fre / s.length;
}
//将结果填入节点
void fill(ChainNodeType ss, String key) {
ss.str = key;
if (fre(key) != 1) {
ss.attr += "{";
for (int i = 0; i < s.length; i++) {
if (s[i].indexOf(key) != -1) {
ss.attr = ss.attr + "u" + (i + 1) + ",";
}
}
ss.attr = ss.attr.substring(0, ss.attr.length() - 1);
ss.attr += "}";
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -