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