| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2145 人关注过本帖
标题:求优化下程序,这个程序能用,就是运行太慢,求优化下能加快速度
取消只看楼主 加入收藏
a13780393
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2012-10-6
收藏
得分:0 
回复 18楼 rjsp
给你提供一个文件,你运行一下看看。不是要按照这个文件中字符的顺序输出,而是按照aaaaaaaa、aaaaaaac、aaaaaaag等这个随机排列的顺序输出。我上个提供的结果,就是按照这样结果输出的,虽然提供的文件中第一个8字符不是aaaaaaaa。但是它输出的时候结果是aaaaaaaa 1。
2012-11-10 16:45
a13780393
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2012-10-6
收藏
得分:0 
回复 20楼 rjsp
1.zip (51.58 KB)
2012-11-10 17:00
a13780393
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2012-10-6
收藏
得分:0 
回复 23楼 rjsp
你的程序没有问题。我也试了,小文件能用(几千,上万吧),有结果。我的文件超过20万个字符串,你的程序就无法运行了。一点就关闭了。
2012-11-14 09:12
a13780393
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2012-10-6
收藏
得分:0 
回复 22楼 rjsp
最后一个问题了,我的文件太大,1.8个G,大概17亿个字符吧。一点就关闭了。小文件的话,可以运行的,结果很好!
2012-11-14 09:49
a13780393
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2012-10-6
收藏
得分:0 
回复 27楼 rjsp
3.rar (394.85 KB)
你运行一下,这个文件,这个是我从1.8G个文件中随机截取了一部分,无法运行。输出结果就是“出现非法字符”但是不知道是什么字符。
2012-11-14 14:41
a13780393
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2012-10-6
收藏
得分:0 
回复 29楼 rjsp
原来如此,明白了,太感谢你了。说实话如果你现在让我给你付款我都愿意,帮了我大忙了。这个程序运行非常快,能节省我95%的时间。我的原文件有将近20亿个字符,你刚才说现在这个只能读取4亿个字符,如果要更多的话,是把哪个地方改一下?我没看明白。愿帮人帮到底,不胜感激!!!
2012-11-14 16:52
a13780393
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2012-10-6
收藏
得分:0 
回复 31楼 rjsp
按道理是后者,等于10才对,不过数据特别大,我做的是统计,所以这点误差可以不考虑了。你最后发的这个代码我刚才运行了一下,
unsigned long long words = 0;
unsigned long long numbers[65536] = { 0 };这两行报错:e:\species\mouse\cpp2.cpp(21) : error C2632: 'long' followed by 'long' is illegal


2012-11-15 09:31
a13780393
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2012-10-6
收藏
得分:0 
回复 33楼 rjsp
是这个意思,我做的是行与行之间需要首尾相接的,把所有字符归为一行进行统计。我把1.8G文件(17亿字符)分成了20份,分别输出结果,然后把数据相加。总结果和对1.8G文件整体扫描得出的结果一样。所以我觉得其实不用改数据类型了吧?
2012-11-15 11:41
a13780393
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2012-10-6
收藏
得分:0 
回复 33楼 rjsp
大兄弟啊,我这有个perl的程序,比较简单,不知道你会不会,你看一下。
#!/usr/bin/perl
use strict;
use warnings;
open IN,"1.txt";
open OUT,">2.txt";
 my $dna  = <IN>;
my $revcom = $dna;
$revcom =~ tr /acgt/ACGT/;
my $gc = $revcom =~ tr/GC//;
my $gc_content = sprintf( "%.2F", $gc / length($revcom) * 100 );
my $at = $revcom =~ tr/AT//;
my $at_content = sprintf( "%.2F", $at / length($revcom) * 100 );
my $ALL = $revcom =~ tr/ACGT//;
my $A = $revcom =~ tr/A//;
my $C = $revcom =~ tr/C//;
my $G = $revcom =~ tr/G//;
my $T = $revcom =~ tr/T//;
print OUT "GC数量:$gc\n";
print  OUT "GC含量:${gc_content}%\n";
print OUT "AT数量:$at\n";
print  OUT "AT含量:${at_content}%\n";
print OUT "A总数: $A\n";
print OUT "C总数: $C\n";
print OUT "G总数: $G\n";
print OUT "T总数: $T\n";
print OUT "ACGT总数: $ALL\n";
close OUT;
close IN;
这个程序的问题,是我的数据在18亿个字符,提示信息是是超出内存(out of memmery).这个怎么修改一下啊
2012-11-27 10:16
a13780393
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2012-10-6
收藏
得分:0 
回复 33楼 rjsp
兄弟,先前我是统计8个字符,这个程序很好使,我要是统计四个字符的话,把你这个程序哪个地方改一下就行了?
2013-01-12 20:38
快速回复:求优化下程序,这个程序能用,就是运行太慢,求优化下能加快速度
数据加载中...
 
   



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

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