Re: [问题] 由两个DNA 数据库搜索相同的DNA 序列

楼主: goodday06 (goodday)   2015-01-21 16:52:28
※ 引述《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 [email protected]/*
作者: LiloHuang (十年一刻)   2015-01-21 21:18:00
是把 substr 切割结果放到 %hash 里,不是弄成 @DB_a建议你把完整程式码跟输入的资料直接贴到 GitHub Gisthttps://gist.github.com/ 方便更多其他板友也能回答这边的概念是把 Perl 原生的 hash 型别来拿当作 set 用若存在一个 key 在某个 hash 容器中,key 肯定是唯一的举例像 $hash{"ATCG"} = 1; 这就是字串 ATCG 当键值对应的资料可任意的指定,上述的例子是一个数字 1你在第一层循环时,我猜你会将输入资料用 substr 切割因为你在第二层循环写说要跟 substr 的结果做比较因此储存到 %hash 的资料就会是那些 substr 的小片段由于 Perl 的 %hash 具备常数时间复杂度 O(1) 的能力在新增资料到 %hash 或者比较某个 key 是否在 %hash都是 O(1),进而使用"内存空间"来换取"CPU时间"
楼主: goodday06 (goodday)   2015-01-22 13:05:00
参考L 大的方法 目前估计不用2hr 可以得到我要的资讯太感谢了!
作者: LiloHuang (十年一刻)   2015-01-22 20:03:00
恭喜!不用 2 小时听起来正常多了
继续阅读

Links booklink

Contact Us: admin [ a t ] ucptt.com