2011-06-08 103 views
0

我有一個文件存儲在一個散列中,值是一個數組。我想比較數組和對方,如果它們完全匹配,然後將它們存儲在一個數組中。Perl比較兩個數組,如果它們完全匹配

例如:

@ geno1 = NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN, NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,A,NN,NN,NN,NN,NN,NN,NN, A,NN,NN,NN,NN,NN,NN,T,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,A,G,NN,NN, NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,G,NN,NN,NN,NN,G,NN,NN,NN,NN,NN,NN,NN,NN, NN,NN,NN,NN,NN,NN,NN,NN,NN,NN

@ geno2 = NN,NN,NN,NN,NN,NN,NN,NN,NN, NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,A,NN,NN,NN,NN,NN,NN,NN, A,NN,NN,NN,NN,NN,NN,T,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,A,G,NN,NN, NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,G,NN,NN,NN,NN,G,NN,NN,NN,NN,NN,NN ,NN,NN,NN,NN,NN,NN,NN,NN

在這個這匹配完全,然後我想將它們存儲在一個數組中。如果它們甚至與一個元素不同。說,

@ geno2 = NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN ,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,A,NN,NN,NN,NN,NN,NN,NN,A,NN,NN ,NN,NN,NN,NN,T,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,A,G,NN,NN,NN,NN,NN ,NN,NN,NN,NN,NN,NN,NN,NN,G,NN,NN,NN,NN,G,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN ,NN,A

在這最後一個元素是A.所以不應該存儲在數組中。如果有一種方法可以做到這一點,而不是通過陣列的話會很好。因爲我必須更頻繁地運行10k個樣本。

回答

1

據我所知,檢查兩個長度爲n的數組是否等於O(n)複雜度,所以你必須通過所有元素。當然,只要你找到了一個區別,你就可以打破這個循環,但是如果差異到了最後,你還是要看看n個元素!

0

我同意MarcoS在一般情況下你需要檢查一切。但是,有些情況下您可以優化您的「平等」定義或您正在進行的匹配類型。

具體來說,數組中有許多重複元素。訂單是否重要?你可以把它壓縮成一個哈希表,如果兩個數組有23NN,3個,2個G和1個T,它們可以被認爲是等價的嗎?

你會一直在反覆相同的數組?如果是這樣,你可以散列(ala md5,sha)數組,並假設如果兩個哈希匹配,那麼這兩個數組匹配(這當然需要基準來確保它實際上加快了速度)。

+0

是訂單事宜,應該是相同的順序。不,「如果兩個陣列有23NN,3個,2個G和1個T」不等同。 – sipra 2011-06-08 15:31:11

相關問題