分析时间复杂度

时间:2011-07-30 12:59:33

标签: algorithm time-complexity

我有2个阵列

a of length n
b of length m

现在我想找到两个阵列共有的所有元素

算法

构建包含A

的所有元素的哈希映射

现在对于B中的每个元素x,检查元素x是否存在于hashmap中。

分析整体时间复杂度

  • 用于构建散列映射O(n)
  • 对于第二步复杂度是O(m)

所以整体是O(m + n)。我是对的吗?

什么是O(m + n)= ??当m很大或反之?

2 个答案:

答案 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)次。