作者: LiloHuang (十年一刻) 2015-01-19 20:52:00
可以考虑在第一层分开后,将 substr 的结果存在 %hash此时第一层的 %hash 里头就会是摆满著一堆切好的资料然后把第二层的 foreach 直接提到外面去,别弄成巢状my %hash;foreach (@DB_a) {# do substr to put items in %hash}foreach (@DB_b) {if (exists $hash{$_}) {# found!}}从时间复杂度的角度来看,原先的做法至少是 O(n^2)但是其实找寻重复的资料这件事情,不需要弄成巢状假设内存够大,可以使用空间来换时间,就不会跑太久注意当资料量异常大时,你得使用 64bit 的 Perl 直译器附带一提, put items in %hash 是把资料当作 key而不是摆到 value 喔 :) 这点要特别提醒一下如果还嫌太慢要再做更多加速,可再使用平行计算的技巧如果觉得机器太慢,也可考虑租用Google Compute Engine