[英]Is O(mn) better than O((m+n)^2)?
算法的輸入是m
和n
。
我的算法的時間復雜度是O(mn)
。
我有一個時間復雜度為O((m+n)²)
的基准算法。
在時間復雜度方面,我的實現是否比基准測試更好?
如此多的評論者和回答者希望僅考慮m = n
或至少當它們通過常數因子相關時的情況。 這不是它的工作原理。
當我們保持m
或n
常數時,您的算法顯然更快; 例如,如果我們將自己限制在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.