| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1805 人关注过本帖
标题:利用c++分析生物信息学数据疑问
只看楼主 加入收藏
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:1 
根据你的程序,是不是就是要一个这样的功能:
> 开头的行略去。
不是的行一肯只含有 agtc 这四个字母,数一数就行了?

这个东西能慢到哪去呀。你上传个数据实例我测测呗。

[ 本帖最后由 pangding 于 2011-7-1 16:40 编辑 ]
2011-07-01 16:05
cpp_初学者
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2011-6-30
收藏
得分:0 
回复 11楼 pangding
你好,版主...
以下是我要读取的输入挡案内容:
程序代码:
[home@cpp]cat input_file.txt
>header_1
ACGTGAGAGATAGAGC
>header_2
AGATGAGATGAGAGATAGA
.
.

写出的c++程序,必须符合一下的条件:
1.若是开头是">",可以直接跳过,无需计算;
2.只计算不是">"的内容.并计算出其总额;
3.将从输入挡案读取及经c++程序处理后的计算结果,存入另一个挡案;
以下是我利用awk语言,所写出的程序内容:
程序代码:
[home@cpp]awk '$0!~">"{total += length($1)}END{print total}' input_file.txt > output_file.txt
[home@cpp]cat output_file.txt
35

2011-07-01 17:20
cpp_初学者
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2011-6-30
收藏
得分:0 
以下是我要读取的输入挡案内容(挡案内容,可能会大过1GB):
程序代码:
[home@cpp]cat input_file.txt
>header_1
ACGTGAGAGATAGAGC
>header_2
AGATGAGATGAGAGATAGA
.
.


写出的c++程序,必须符合一下的条件:
1.若是开头是">",可以直接跳过,无需计算;
2.只计算不是">"的内容.并计算出其总额;
3.将从输入挡案读取及经c++程序处理后的计算结果,存入另一个挡案;
以下是我利用awk语言,所写出的程序内容:
程序代码:
[home@cpp]awk '$0!~">"{total += length($1)}END{print total}' input_file.txt > output_file.txt
[home@cpp]cat output_file.txt
35

希望各位c++的高手,可以分享如何利用c++,写出一个类型awk语言的程序...
我利用的awk语言,在读取太大的挡案时,可能会需要很长的时间 :(
因此希望各位高手的c++程序,可以加快挡案的分析速度
谢谢 :)
2011-07-01 17:27
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:1 
LZ先说清问题嘛,是不是每行只有agtc这几个字母?
说下你处理的文件大小,耗费的时间。不同的机器上不同的数据也不好说明问题。如果不仅限于C++的特性,对于几G的文件可以试试文件内存映射。

离恨恰如春草,更行更远还生。
2011-07-01 20:39
cpp_初学者
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2011-6-30
收藏
得分:0 
回复 14楼 玩出来的代码
你好,每行多数的可能会是A,C,G,T,N,etc...
我主要的目的,是希望利用c++来计算,除了开头有">"行的内容...
其他行,总共有多少个英文字母的总合...
eg.
程序代码:
>header_1
ACGTGAGAGATAGAGC
>header_2
AGATGAGATGAGAGATAGA

以上的例子,header_1下面的行列,共有16个字母;header_2下面的行列,共有19个字母;
因此,我希望得到的理想结果是16+19= 35...
35

希望我的解释,有让你更了解的 :)
先多谢你的指导噢...
2011-07-01 21:49
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:1 
一个多G的文件!那慢点也很正常的,你用 awk 写的要耗多少时间?
2011-07-01 22:49
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:2 
我写了一个 sed 的,自己试了试能比 awk 的快3-5倍。
$ ls -lh in.txt
-rw-r--r-- 1 pd pd 31M 2011-07-01 23:20 in.txt
$ time awk '$0!~">"{total += length($1)}END{print total}' in.txt
28800000

real    0m7.436s
user    0m5.848s
sys     0m0.136s
$ time a=$(sed -e '/>/d' < in.txt | wc -lm); a+="r-p"; dc <<< $a

real    0m2.452s
user    0m1.936s
sys     0m0.112s
28800000
$
感觉用纯 C 也就最多再快一倍。


[ 本帖最后由 pangding 于 2011-7-1 23:28 编辑 ]
2011-07-01 23:25
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:0 
pangding用的多大的文件测试?

离恨恰如春草,更行更远还生。
2011-07-01 23:56
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
31M。不是 ls 了吗~
2880W个字符统计出来花个1秒钟我觉得也正常,这个东西线性的,没什么好算法。1G 的文件我这种老爷机估计都开不开……


[ 本帖最后由 pangding 于 2011-7-2 00:18 编辑 ]
2011-07-02 00:13
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:1 
我用 c 语言写了一个,是 0.856s。看来还是比我估计的快了一些

把文件搞大了一倍,再跑就是 1.696s 秒。严格的正比关系~


[ 本帖最后由 pangding 于 2011-7-2 00:26 编辑 ]
2011-07-02 00:21
快速回复:利用c++分析生物信息学数据疑问
数据加载中...
 
   



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

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