作者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/m.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