| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2145 人关注过本帖
标题:求优化下程序,这个程序能用,就是运行太慢,求优化下能加快速度
取消只看楼主 加入收藏
a13780393
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2012-10-6
结帖率:25%
收藏
 问题点数:0 回复次数:19 
求优化下程序,这个程序能用,就是运行太慢,求优化下能加快速度
#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 编辑 ]
搜索更多相关主题的帖子: 优化 include person expect 
2012-11-09 12:41
a13780393
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2012-10-6
收藏
得分:0 
回复 2楼 rjsp
非常感谢这位仁兄,其实这个文件里只有acgt这四种字母,没有其它的。所以不用遇到其他字母或者汉字怎么办。你能否再改一下啊?修正一下。
2012-11-09 16:41
a13780393
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2012-10-6
收藏
得分:0 
回复 2楼 rjsp
也没有空格,就是一个挨着一个的排列,但需要步长为1,逐个向后推,出现一个就计数一个,步长不是8
2012-11-09 16:46
a13780393
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2012-10-6
收藏
得分:0 
回复 5楼 rjsp
输出结果不对啊,以你给出的文件举例,aaaaaaaa出现的频率为10才对(17-8+1),遇到回车往下接下才行。
2012-11-09 16:50
a13780393
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2012-10-6
收藏
得分:0 
回复 5楼 rjsp
仁兄,现在就一个问题了,我刚才试了一下,我的文件1的字符串非常大,有17亿个字符,这个程序我一运行,就停止工作了,方法没有错误,就是一运行就停止。我的那个程序,专门设置了一个静态变量,所以避免了这个问题,能运行。你的这个哪里需要改一下啊?
2012-11-09 17:05
a13780393
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2012-10-6
收藏
得分:0 
回复 5楼 rjsp
加个QQ吧?我把文件传给你你看一下,为什么在我这无法运行
2012-11-09 17:19
a13780393
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2012-10-6
收藏
得分:0 
回复 10楼 rjsp
可是,我用你这个代码,运行我的大文件,只输出第一个8长度的字符,而且频数为1,剩下那65535个都没出现。
2012-11-10 16:14
a13780393
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2012-10-6
收藏
得分:0 
回复 11楼 rjsp
对啊,我是从网站上下载的那个基因文件,它下载下来就有17亿个字符。我的程序已经运行四天了,还没结果。以前别人做过这个,用这个程序出结果得1周以上。时间太长,所以 我想找人优化一下
2012-11-10 16:16
a13780393
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2012-10-6
收藏
得分:0 
回复 12楼 rjsp
首先非常感谢,这位仁兄的无私的奉献。我已经很感谢你了。那个输出结果不是按照,文件1的字符排列顺序输出的。输出结果应当是这样的,本来有65536(4的8次方种组合的结果)个长度为8的字符,你这个结果只给出了11个,剩下那65525个没出现的话,应当也给出来,只不过结果为数字0,但这个结果得有。
2012-11-10 16:22
a13780393
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2012-10-6
收藏
得分:0 
回复 12楼 rjsp
Y.zip (409.87 KB)
让你看一下,我希望得到的结果。应该是65536个都给出来,如果哪个没出现,后面也给出结果0。有附件
2012-11-10 16:27
快速回复:求优化下程序,这个程序能用,就是运行太慢,求优化下能加快速度
数据加载中...
 
   



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

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