程序运行缓慢,望赐教改进!!!
程序本身没错,但运行缓慢,十来天不出结果,乞求改进!!勿吝赐教!!!谢谢!!!
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"math.h"
#define N 65536 //计算八联体
struct motif
{
char name[20];
int number;
} lead[N]; //结构体数组更清晰,因为每一种三联体组合包括字符串组成形式和出现次数两个内容
void main() //之所以void,因为不需要向屏幕上输出任何东西
{
int i,j,m,n,x,y,u,v,h=0,pw[2001]={0}; //pw[2001]用来统计出现次数相同的三联体个数
char ch[4]={'A','T','C','G'};
static char str[95000000];
float bili[2001]={0.0};
FILE *in,*out;
in=fopen("F:\\24条染色体结果\\结果1.txt","r"); //第12行
out=fopen("F:\\结果文件\\收获1.txt","w");
for(i=0;i<4;i++) //统计所有的三联体组合情况
for(j=0;j<4;j++)
for(m=0;m<4;m++)
for(n=0;n<4;n++)
for(x=0;x<4;x++)
for(y=0;y<4;y++)
for(u=0;u<4;u++)
for(v=0;v<4;v++)
{
lead[h].name[0]=ch[i];
lead[h].name[1]=ch[j];
lead[h].name[2]=ch[m];
lead[h].name[3]=ch[n];
lead[h].name[4]=ch[x];
lead[h].name[5]=ch[y];
lead[h].name[6]=ch[u];
lead[h].name[7]=ch[v];
h++;
}
for(h=0;h<N;h++)
lead[h].number=0;
while(!feof(in)) //feof()用来测试文件是否结束,如果结束则返回值1,未结束返回0;很明显文件未结束程序才运行,故加上个!来让while里值为真
{
fgets(str,95000000,in);
for(i=0;i<95000000;i++) //以下四行用来判断str中各个三联体出现次数
for(h=0;h<N;h++)
if(lead[h].name[0]==str[i]&&lead[h].name[1]==str[i+1]&&lead[h].name[2]==str[i+2]&&lead[h].name[3]==str[i+3]
&&lead[h].name[4]==str[i+4]&&lead[h].name[5]==str[i+5]&&lead[h].name[6]==str[i+6]&&lead[h].name[7]==str[i+7])
lead[h].number++;
}
for(h=0;h<N;h++)
fprintf(out,"%d\t%s\t%d\n",h,lead[h].name,lead[h].number);
for(i=0;i<=2000;i++)
{
for(h=0;h<N;h++)
if(i==lead[h].number)
pw[i]+=1; //计算出出现了j次的组合的个数
bili[i]=(float)pw[i]/N; //计算所占比例
fprintf(out,"%d\t%4d\t%f\n",i,pw[i],bili[i]);
}
fclose(out);
}