[英]Difference between O(m+n) and O(mn)?
我試圖通過不同的方法找到算法的復雜性。 在數學上我遇到了一個O(m + n)和另一個O(mn)方法。 但是,我無法掌握或說出這一點。 這不像是我看着他們並得到“啊!這就是發生了什么”的感覺! 有人可以使用他們自己的例子或任何其他工具解釋這個嗎?
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)
我建議看一下這個問題/答案 ,以便了解最后的過渡。
對於O(mn)
:
O(mn) => O(mm) => O(m^2)
我對尋找直覺的建議被認為是如下實驗:
首先,要意識到m和n是輸入的兩種不同測量值 。 它們可能是兩個輸入流的長度,矩陣邊長,或同一數據結構的兩個不同屬性的計數,例如同一圖的邊和節點數,或任何類似的度量。
直覺是big-O用簡單函數表示算法的真實運行時間(或者其他一些方面,如比較計數或所需空間)的界限 - 調用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的額外常數因子(與上述兩種算法相比,它在小輸入上可能非常慢):
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)。 如果實際運行時間受到增長較慢的函數的限制,那么它也受到所有增長速度較快的函數的限制。
然而,人們常常說“這個算法是O(n)”,而意味着界限很緊 。 也就是說,對於某些常數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整數的數組上擊敗它。
O(m + n)比O(mn)快很多( 一個數量級 )。
O(m + n)算法可以是迭代2個集合並對每個元素執行恆定時間(O(1))操作的算法。
O(mn)算法可以是迭代第一組並對第二組中的匹配元素進行線性搜索(O(n))的算法。
O(mn)算法可能就是教授們稱之為“天真的方法”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.