簡體   English   中英

O(mn) 比 O((m+n)^2) 好嗎?

[英]Is O(mn) better than O((m+n)^2)?

算法的輸入是mn

我的算法的時間復雜度是O(mn)

我有一個時間復雜度為O((m+n)²)的基准算法。

在時間復雜度方面,我的實現是否比基准測試更好?

如此多的評論者和回答者希望僅考慮m = n或至少當它們通過常數因子相關時的情況。 這不是它的工作原理。

當我們保持mn常數時,您的算法顯然更快; 例如,如果我們將自己限制在m = 1的情況下,那么您的算法的復雜度為O(n)而替代方案為O(n^2) ,因此在這種受限情況下,您的算法顯然更好。

我們可以說的是(m+n)^2 = m^2 + n^2 + 2mn顯然是Ω(mn) ,其中Ω表示這是一個下界,並且您的算法(漸近)總是至少一樣好; 即,沒有其他算法漸近優於您的算法的限制情況。 但是我們確實知道在某些情況下您的情況更好。 所以,總的來說,你的更好。

是的,您的實施更好。 回想一下 (m+n)^2 = m^2 + n^2 + 2mn,所以 (m+n)^2 > mn

O(mn)並非在所有情況下都比O((m+n)²)


看看這個案例:

O((m+n)²) = O(mn)如果m=O(n)

對於m=O(n)可以引入一個新變量( c:= max(n,m)

O((m+n)²) = O(m² + 2mn + n²) 
           = O(c² + 2cc + c²=
           = O( 3* c²)
           = O(c²)

O(mn)      = O(cc) = O(c²)

因此,在 n 和 m 僅相差大約一個常數的情況下,兩個復雜度是相同的。


如評論中所述if not m=O(n)
O(n²) > O(nm)O(m²) > O(mn)O(mn)更好。


My Fazit:根據你對“更好”的定義,你可以說:
O(mn)永遠不會O((m+n)²)
要么
O(mn)優於O((m+n)²)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM