如何有效地检查两个阵列是否减少到同一组?

时间:2014-11-17 21:20:22

标签: arrays algorithm set unique

比较两个数组以查看它是否包含仅考虑不同元素的相同元素的最有效方法是什么?假设两个数组的长度相同。 这种算法的伪代码是什么?通过不同的元素,我的意思是例如S1 = {1,2,2,3}和S2 = {1,1,2,3}等于

2 个答案:

答案 0 :(得分:1)

如果对数组进行排序,那么比较它们的内容非常有效(基本上是通过扫描它们)。

更新:从每个阵列的 low 端开始,并重复以下操作:如果两个当前元素不同,或者一个阵列在另一个阵列之前耗尽,停止(数组不同)。否则,跳过两个阵列中当前值的所有副本。一旦你耗尽了两个阵列,就会知道它们是等于的(根据你的定义)。

i = j = 0
while i < length(S1) and j < length(S2) do
    if S1[i] != S2[j]
        return false
    val = S1[i]
    while i < length(S1) and S1[i] == val do
        increment i
    while j < length(S2) and S2[j] == val do
        increment j
return (i == length(S1) and j == length(S2))

答案 1 :(得分:0)

Ruby本身就是伪代码(可读和简短)。 所以这里是您需要的所有代码。 uniq表示:对数组进行排序,过滤掉double值 并比较内容。 正如您在示例中看到的,您甚至可以使用嵌套数组。

s1 = [1,2,2,3]
s2 = [1,1,2,3]
s3 = [1,2,3,1]
s4 = [0,1]
s5 = [1,2,[2,2],3]

print s3.uniq #[1, 2, 3]
print s1.uniq == s2.uniq #true
print s1.uniq == s3.uniq #true
print s1.uniq == s4.uniq #false
print s1.flatten.uniq == s5.flatten.uniq #true