【发布时间】:2011-07-30 12:59:33
【问题描述】:
我有 2 个数组
a of length n
b of length m
现在我想找到两个数组共有的所有元素
算法:
构建包含 A 的所有元素的哈希映射
现在检查 B 中的每个元素 x 是否存在于 hashmap 中。
分析整体时间复杂度
- 用于构建哈希图 O(n)
- 第二步复杂度为 O(m)
所以总体是O(m+n)。我说的对吗?
什么是 O(m+n) = ??当 m 大时,反之亦然?
【问题讨论】:
我有 2 个数组
a of length n
b of length m
现在我想找到两个数组共有的所有元素
算法:
构建包含 A 的所有元素的哈希映射
现在检查 B 中的每个元素 x 是否存在于 hashmap 中。
分析整体时间复杂度
所以总体是O(m+n)。我说的对吗?
什么是 O(m+n) = ??当 m 大时,反之亦然?
【问题讨论】:
O(m) + O(n) = O(m+n),如果你知道 m>n 那么 O(m+n)=O(m+m)=O(m)。
注意:哈希理论上不保证 O(1) 查找,但实际上您可以依靠它(= 它是平均复杂度,随机输入的预期运行时间)。
还请注意,您的算法将反复发出 b 的重复元素的信号,这些元素也存在于 a 中。如果这是一个问题,您必须将其存储在您已经检查/打印出该元素的哈希中。
【讨论】:
平均情况时间复杂度为O(m + n)。如果你正在做一些实现,这是你应该考虑的,因为哈希映射通常不会有冲突。 O(m+n) = O(max(m, n))
然而,如果这是一个测试题,时间复杂度指的是最坏情况时间复杂度。最坏情况下的时间复杂度是O(mn),因为在最坏情况下,每个第二步都可能花费O(n) 时间。
【讨论】: