求优化下程序,这个程序能用,就是运行太慢,求优化下能加快速度
#include<stdio.h>#include<stdlib.h>
#include<string.h>
#include<math.h>
#define N 65536
struct motif
{
char name[20];
float number;
} lead[N];
void main()
{
/////计算TATA 保守性
FILE *in,*out;
in=fopen("result1.txt","r");
out=fopen("结果.txt","w");
static char s[1687200000];
char c[4]={'a','g','c','t'};
int i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,number=0;
int person=0;
float words=0;
float expect=0;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
for(l=0;l<4;l++)
for(m=0;m<4;m++)
for(n=0;n<4;n++)
for(p=0;p<4;p++)
for(q=0;q<4;q++)
for(r=0;r<4;r++)
{
lead[number].name[0]=c[i];
lead[number].name[1]=c[j];
lead[number].name[2]=c[l];
lead[number].name[3]=c[m];
lead[number].name[4]=c[n];
lead[number].name[5]=c[p];
lead[number].name[6]=c[q];
lead[number].name[7]=c[r];
number++;
}
while(!feof(in))
{
fgets(s,1687200000,in);
if(s[0]=='@') break;
for(i=0;i<1687199999;i++)
{
for(j=0;j<4;j++)
for(k=0;k<4;k++)
for(l=0;l<4;l++)
for(m=0;m<4;m++)
for(n=0;n<4;n++)
for(p=0;p<4;p++)
for(q=0;q<4;q++)
for(r=0;r<4;r++)
{
if(s[i]==c[j]&&s[i+1]==c[k]&&s[i+2]==c[l]&&s[i+3]==c[m]&&s[i+4]==c[n]&&s[i+5]==c[p]&&s[i+6]==c[q]&&s[i+7]==c[r])
lead[person].number++;
person++;
}
person=0;
words++;
}
for(i=0;i<1687199999;i++)
s[i]=' ';
}
fprintf(out,"The Number of total words are %f\n",words);
expect=words/N;
fprintf(out,"The Expect Number words are %f\n",expect);
for(k=0;k<N;k++)
fprintf(out,"%s\t%f\t%f\n",lead[k].name,lead[k].number,lead[k].number/65536.0);
fclose(out);
}
这个程序的意思是统计由acgt这四个字母组合成的8长度的字符串,在另一个文件中出现的频数。由这四种字母组成字符串长度为8的方式一共有4的8次方个(65536)。比如:aaaaaaaa、aaaaaaag、aaaaaaac等等 以此类推。另一个文件中也全是由这四种字母组成的,共有16亿长度。我就是想统计这65536个字符串中,在文件2中,每个字符串各出现了多少 次,并依次输出。
[ 本帖最后由 a13780393 于 2012-11-9 18:27 编辑 ]