推 herculus6502: 讓我想到cas9啊… 01/19 18:07
推 flu: 對DNA sequencing不熟..只是 用cpan module不會比較方便嗎? 01/19 18:58
推 uper: 用hash 01/19 19:51
推 LiloHuang: 可以考慮在第一層分開後,將 substr 的結果存在 %hash 01/19 20:52
→ LiloHuang: 此時第一層的 %hash 裡頭就會是擺滿著一堆切好的資料 01/19 20:54
→ LiloHuang: 然後把第二層的 foreach 直接提到外面去,別弄成巢狀 01/19 20:54
推 LiloHuang: my %hash; 01/19 21:06
→ LiloHuang: foreach (@DB_a) { 01/19 21:06
→ LiloHuang: # do substr to put items in %hash 01/19 21:06
→ LiloHuang: } 01/19 21:07
→ LiloHuang: foreach (@DB_b) { 01/19 21:07
→ LiloHuang: if (exists $hash{$_}) { 01/19 21:07
→ LiloHuang: # found! 01/19 21:08
→ LiloHuang: } 01/19 21:08
→ LiloHuang: } 01/19 21:08
推 LiloHuang: 從時間複雜度的角度來看,原先的做法至少是 O(n^2) 01/19 21:09
→ LiloHuang: 但是其實找尋重複的資料這件事情,不需要弄成巢狀 01/19 21:10
→ LiloHuang: 假設記憶體夠大,可以使用空間來換時間,就不會跑太久 01/19 21:11
→ LiloHuang: 注意當資料量異常大時,你得使用 64bit 的 Perl 直譯器 01/19 21:11
→ LiloHuang: 附帶一提, put items in %hash 是把資料當作 key 01/19 21:15
→ LiloHuang: 而不是擺到 value 喔 :) 這點要特別提醒一下 01/19 21:16
推 LiloHuang: 如果還嫌太慢要再做更多加速,可再使用平行計算的技巧 01/19 21:17
→ LiloHuang: 如果覺得機器太慢,也可考慮租用Google Compute Engine 01/19 21:19
→ goodday06: 多謝! 我再試看看! 01/20 09:38
→ LiloHuang: 更正,時間複雜度至少會是 O(m*n) 兩層迴圈資料數不同 01/21 21:50