.net intersect()方法的时间/空间复杂度

时间:2016-06-22 07:22:26

标签: .net big-o complexity-theory asymptotic-complexity

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

Intersection of two sets in most optimized way

它将方法的复杂性描述为o(m + n)。对于时间空间来说,这是一个很大的复杂性吗?

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

2 个答案:

答案 0 :(得分:1)

(1)答案描述了从一个列表中构建一个hashset并检查另一个列表中的元素。空间复杂性来自构建hashset。散列集的大小与放入其中的元素数量成比例,m或n,具体取决于您构建散列集的集合。假设你在最坏的情况下从更大的集合中构建哈希集。然后空间复杂度为O(max(m,n))。该复杂性等级与O(m + n)相同。为什么?因为max(m,n)&lt;所有正m,n均为1 *(m + n);对于所有正m,n,m + n <= 2 * max(m,n)。所以,是的,所描述的方法的时间和空间复杂度都是O(m + n)或等价,O(max(m,n))。

(2)对于所有正m,n,m + n <= 1 *(n + m);对于所有正m,n,n + m <= 1 *(m + n)。因此,O(m + n)与O(n + m)相同。

答案 1 :(得分:0)

  

这是时间和空间的复杂性吗?

如果按O(m + n)方法进行,空间复杂度将为O(m < n ? m : n)。为什么?您可以将m和n大小的较小的一个保留在内存中,然后从较大的一个中读取1个项目以测试较大的一个项目是否在较小的项目中。否则,如果你将它们都保留在内存中,则空间复杂度将变为O(1),而时间复杂度将变为O(mn)。

  

在m之前是否是正确的序列,或者这些变量的序列是否与大的符号无关(非常多)?

由于m + n = n + m,因此根本不重要。如果复杂度类似于O(m Log n)或O(mn 2 ),那么我确定你不能把它写成O(n Log m)或O(nm < SUP> 2 )。