比较List交集的算法

时间:2017-05-21 04:03:12

标签: python algorithm

我正在尝试设计一种算法来查找已排序和不同数组之间的公共元素。我使用以下两种方法之一。在运行时和时间复杂度方面要么更好吗?

方法1:

# O(n^2) ?
common = []

def intersect(array1,array2):
    dict1 = {}
    for item in array1:
        dict1.update({item:0})
    for k,v in dict1.iteritems():
        if k in array2:
             common.append(k)          
    return common

print intersect(array1=[1,2,3,5], array2 = [5,6,7,8,9])

方法2:

# probably O(n^2)
    common = []

def intersect(array1,array2):
    for item1 in array1:
        for item2 in array2:
            if (item1==item2): 
                common.append(item1)
    return common

print intersect(array1=[1,2,3,5], array2 = [5,6,7,8,9])

2 个答案:

答案 0 :(得分:1)

array1包含M个元素,array2包含N个元素。第一种方法具有时间复杂度O(M lg N)。第二种方法具有时间复杂度O(M*N)。因此,从时间复杂性的角度来看,第一个更好。但请注意,第一种方法具有O(M)空间复杂度,而第二种方法则没有。{/ p> BTW,可能有O(max(M, N))算法。

答案 1 :(得分:0)

set(array1).intersection(set(array2))可能是最快的解决方案。 intersection方法快速且易于实施。不确定它的时间复杂性,但你可能想看看它的实现。