【问题标题】:time/space complexity for .net intersect() method.net intersect() 方法的时间/空间复杂度
【发布时间】:2016-06-22 07:22:26
【问题描述】:
【问题讨论】:
标签:
.net
big-o
complexity-theory
asymptotic-complexity
【解决方案1】:
(1) 答案描述了从一个列表中构建一个哈希集,并根据它检查另一个列表中的元素。空间复杂度来自构建哈希集。哈希集的大小与放入其中的元素数量成正比,m 或 n,取决于您构建哈希集的集合。假设您在最坏的情况下从更大的集合中构建散列集。那么空间复杂度是O(max(m, n))。这个复杂度等级与 O(m + n) 相同。为什么?因为对于所有正的 m, n,max(m, n)
(2) m + n
【解决方案2】:
这是时间和空间的最大复杂性吗?
如果你使用 O(m + n) 方法,空间复杂度将为 O(m < n ? m : n)。为什么?您可以将 m 和 n 大小的集合中较小的一个保留在内存中,然后从较大的集合中一次读取一项,以测试较大的集合中的一项是否在较小的集合中。否则,如果你将它们都保留在内存之外,空间复杂度将变为 O(1),而时间复杂度将达到 O(mn)。
m 之前的 n 是正确的序列吗?还是这些变量的序列在大 o 表示法中无关紧要(非常)?
既然 m + n = n + m,那就无所谓了。如果复杂度类似于 O(m Log n) 或 O(mn2),那么我确定您不能将其写为 O(n Log m) 或 O(nm2).