Perl如果它们完全匹配,则比较两个数组

时间:2011-06-08 15:06:35

标签: 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 < / p>      

@ 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,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 < / p>

在这个匹配完全匹配,然后我想将它们存储在一个数组中。如果它们即使是一个元素也不同。说,

  

@ 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,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 < / p>

在这里,最后一个元素是A.所以不应该存储在数组中。如果有一种方法可以做到这一点,而不是通过阵列将是伟大的。因为我必须在10k样本上更频繁地运行它。

2 个答案:

答案 0 :(得分:1)

据我所知,检查两个长度为n的数组是否等于O(n)复杂度,所以你必须经历所有元素。当然,一旦找到差异,你就可以打破循环,但如果差异在最后,那么你仍然需要看n个元素!

答案 1 :(得分:0)

我同意MarcoS的说法,在一般情况下你需要检查一切。但是,在某些特定情况下,您可以优化“相等”的定义或您正在进行的匹配类型。

具体来说,数组中有许多重复的元素。订单有关系吗?你能将它压缩成一个哈希表,如果两个数组有23NN,3个As,2个G和1个T,它们可以被认为是等价的吗?

您是要反复匹配相同的阵列吗?如果是这样,你可能哈希(ala md5,sha)数组并假设如果两个哈希匹配则两个数组匹配(这当然需要基准测试以确保它实际上加速了)。