我有2个阵列
a of length n
b of length m
现在我想找到两个阵列共有的所有元素
算法:
构建包含A
的所有元素的哈希映射现在对于B中的每个元素x,检查元素x是否存在于hashmap中。
分析整体时间复杂度
所以整体是O(m + n)。我是对的吗?
什么是O(m + n)= ??当m很大或反之?
答案 0 :(得分:1)
O(m)+ O(n)= O(m + n),如果你知道m> n,那么O(m + n)= O(m + m)= O(m)。
注意:哈希理论上不保证O(1)查找,但实际上你可以指望它(=它是平均复杂度,随机输入的预期运行时间)。
另请注意,您的算法会反复发出b中存在的重复元素b的信号。如果这是一个问题,您必须存储已经检查/打印出该元素的哈希值。
答案 1 :(得分:0)
平均案例时间复杂度为O(m + n)
。如果您正在执行某些实现,那么您应该考虑这一点,因为哈希映射通常不会发生冲突。 O(m+n) = O(max(m, n))
然而,如果这是一个测试问题,那么按时间复杂度,人们的意思是最坏情况时间复杂度。最坏的情况时间复杂度为O(mn)
,因为在最坏的情况下,每个第二步都需要O(n)
次。