我正在尝试设计一种算法来查找已排序和不同数组之间的公共元素。我使用以下两种方法之一。在运行时和时间复杂度方面要么更好吗?
方法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])
答案 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
方法快速且易于实施。不确定它的时间复杂性,但你可能想看看它的实现。