【问题标题】:time/space complexity for .net intersect() method.net intersect() 方法的时间/空间复杂度
【发布时间】:2016-06-22 07:22:26
【问题描述】:

这篇之前的 SO 帖子描述了使用 .NET Intersect() 方法:

Intersection of two sets in most optimized way

它将方法的大 o 复杂度描述为 o(m+n)。这是时间空间的大复杂度吗?

另外,我在其他地方读到 n 应该在 m 之前以大 o 符号表示,所以上面的复杂度应该写成 o(n+m)。 m 之前的 n 是正确的序列,还是这些变量的序列在大 o 符号下(非常)无关紧要?

【问题讨论】:

    标签: .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).

      【讨论】:

        猜你喜欢
        • 2016-02-13
        • 2012-08-14
        • 1970-01-01
        • 2021-01-23
        • 2013-09-12
        • 2018-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多