作者goodday06 (goodday)
看板Perl
标题Re: [问题] 由两个DNA 资料库搜索相同的DNA 序列
时间Wed Jan 21 16:52:28 2015
※ 引述《goodday06 (goodday)》之铭言:
: 我有两个DNA database:
: database A 有约18 万条序列,每条约500nt
: database B 有约5 万条序列,每条约5000nt
: 我希望让这A、B两个database 互相比对,
: 以找出A、B两个database中,共有相同20nt 的两笔序列。
: 我先用 "foreach" 将database A 每条序列分开,
: 再用 "substr" 每20个nt 搜索 (DNA 的正反股都要搜索)
: 再用 "foreach" 将database B 的序列逐一检查跟 "substr" 相同者
: 结果... 我用小一点的database 测试并且估算,
: 这样用笔电算完,总共要四千天左右 XD
: 想请教先进们
: 是否有节省时间的运算方式?
: 或是换好一点的电脑会算比较快吗?
: 先谢不吝赐教!!
延续上一个问题
我已经依照L 大的意见将substr 制作成@DB_a,
要怎麽制作成 "%hash"?
抱歉我是perl新手 ^^"
十分感谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.112.89.53
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Perl/M.1421830351.A.8BE.html
1F:推 LiloHuang: 是把 substr 切割结果放到 %hash 里,不是弄成 @DB_a 01/21 21:18
2F:→ LiloHuang: 建议你把完整程式码跟输入的资料直接贴到 GitHub Gist 01/21 21:19
4F:推 LiloHuang: 这边的概念是把 Perl 原生的 hash 型别来拿当作 set 用 01/21 21:34
5F:→ LiloHuang: 若存在一个 key 在某个 hash 容器中,key 肯定是唯一的 01/21 21:36
6F:→ LiloHuang: 举例像 $hash{"ATCG"} = 1; 这就是字串 ATCG 当键值 01/21 21:38
7F:→ LiloHuang: 对应的资料可任意的指定,上述的例子是一个数字 1 01/21 21:40
8F:→ LiloHuang: 你在第一层回圈时,我猜你会将输入资料用 substr 切割 01/21 21:42
9F:→ LiloHuang: 因为你在第二层回圈写说要跟 substr 的结果做比较 01/21 21:42
10F:→ LiloHuang: 因此储存到 %hash 的资料就会是那些 substr 的小片段 01/21 21:43
11F:→ LiloHuang: 由於 Perl 的 %hash 具备常数时间复杂度 O(1) 的能力 01/21 21:46
12F:→ LiloHuang: 在新增资料到 %hash 或者比较某个 key 是否在 %hash 01/21 21:46
13F:→ LiloHuang: 都是 O(1),进而使用"记忆体空间"来换取"CPU时间" 01/21 21:48
14F:→ goodday06: 参考L 大的方法 目前估计不用2hr 可以得到我要的资讯 01/22 13:05
15F:→ goodday06: 太感谢了! 01/22 13:05
16F:推 LiloHuang: 恭喜!不用 2 小时听起来正常多了 01/22 20:03