我试图通过不同的方法找到算法的复杂性。在数学上我遇到了一个O(m + n)和另一个O(mn)方法。但是,我无法掌握或说出这一点。这不像是我看着他们并得到“啊!这就是发生了什么”的感觉!有人可以使用他们自己的例子或任何其他工具解释这个吗?
答案 0 :(得分:8)
O(m+n)
示例:
for(int i = 0, i < m, i++)
//code
for(int j = 0, j < n, j++)
//code
m
迭代代码发生。然后n
迭代代码发生。
O(mn)
示例:
for(int i = 0, i < m, i++)
for(int j = 0, j < n, j++)
//code
对于m
的每次迭代,我们都有n
次代码迭代。想象一下迭代非方形2D数组。
m
和n
不一定等于相同的值。如果 等于相同的值,那么对于O(m+n)
:
O(m+n) => O(m+m) => O(2m) => O(m)
我建议您查看this question/answer以了解最后一次过渡。
对于O(mn)
:
O(mn) => O(mm) => O(m^2)
答案 1 :(得分:4)
我对寻找直觉的建议被认为是如下实验:
首先,要意识到m和n是两个输入的不同测量值。它们可能是两个输入流的长度,矩阵边长,或同一数据结构的两个不同属性的计数,例如同一图的边和节点数,或任何类似的度量。
直觉是big-O在一个简单的函数方面表达了算法 true 运行时(或者其他一些方面,如比较计数或所需空间)的界限 - 调用R(m,n) - 乘以某个任意常数。我们忽略常数因子,并通过调用它们的运行时间O(R(m,n))来考虑由同一个R作为族的所有算法。
因此,大O(m + n)表示对于适当大的m和n,实际运行时间受某些函数R(m,n)= C(m + n)的限制。对于图形示例,这表示算法的实际运行时间将受顶点数和边数之和的倍数限制。
您可以将边界函数视为具有轴m,n和R(m,n)的3d图形。或者你可以想到图表:
R(m,n) = m + n
--------------
m= 1 2 3 4
n=1 1 2 3 4
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
对于R(m,n)= mn,你有
R(m,n) = mn
--------------
m= 1 2 3 4
n=1 1 2 3 4
2 2 4 6 8
3 3 6 9 12
4 4 8 12 16
作为一个三维图形,第一个函数是一个平面,第二个函数几乎在所有点上都是一个快速增长的函数。这意味着如果m和n增长得足够大,O(mn)界限最终会比O(m + n)更大(对应于可能更慢的程序),因为常数变得无关紧要。
对于快速增长成本的一个例子,假设O(m + n)算法在其运行时界限中具有3的额外常数因子(与上述两种算法相比,它在小输入上可能非常慢): / p>
R(m,n) = 3(m + n)
--------------
m= 1 2 3 4
n=1 3 9 12 15
2 9 12 15 18
3 12 15 18 21
4 15 18 21 24
所以O(m + n)看起来它的约束比上图中的O(mn)约束更少。但是看看m = n = 100的情况。这里O(m + n)算法的约束是3(m + n)= 600.但是具有小常数的O(mn)算法已经绑定了mn = 10000.显然,如果m和n很大,你想要第一个算法。
@Anonymous在本文的初始版本上提出了一个很好的观点,这让大O和大Theta感到困惑。 Big-O仅处理被测数量的边界或上限。例如,这意味着每个 O(n)算法也是O(n log n)和O(n ^ 2)。如果实际运行时间受到增长较慢的函数的限制,那么它也受到所有增长速度较快的函数的限制。
然而,人们常说'#34;这种算法是O(n)&#34;而意味着界限紧。也就是说,对于某些常数C,Cn是运行时间的上限,并且对于某些其他常数D(并且适当地大的n),Dn也是下限。这种紧密界限适当地表示为Theta(n),而不是O(n)。 Theta(R(m,n))算法的运行时间(粗略地说)与R(m,n)成比例。
我最后补充说,在很多情况下你不能忽略常量。文献中存在许多渐近渐近的算法。比常用的常量,但常量如此之大,以至于对于实际问题,它们总是太慢。计算几何有很多例子。 Radix 2排序是另一种。它是Theta(n),但实际上一个好的快速排序(Theta(n log n)平均情况)将在大小至少为10 ^ 8整数的数组上击败它。
答案 2 :(得分:0)
O(m + n)比O(mn)快很多(一个数量级)。
O(m + n)算法可以是迭代2组并对每个元素进行恒定时间(O(1))运算的算法。
O(mn)算法可以是迭代第一组的算法,并对第二组中的匹配元素进行线性搜索(O(n))。
O(mn)算法可能是教授们称之为天真的方法