我的計算機科學II最後是明天,我需要一些幫助瞭解如何找到代碼段的Big-Oh。我搜索了互聯網,並沒有找到任何我需要了解它的例子。我需要幫助瞭解如何找到代碼段的Big-Oh
這是我們從樣本最後一個問題:
for(int pass = 1; i <= n; pass++)
{
for(int index = 0; index < n; index++)
for(int count = 1; count < n; count++)
{
//O(1) things here.
}
}
}
我們應該找到該算法的順序(big-OH)。
我認爲,這將是爲O(n^3),這裏是我是如何來到這個結論
for(int pass = 1; i <= n; pass++) // Evaluates n times
{
for(int index = 0; index < n; index++) // Evaluates n * (n+1) times
for(int count = 1; count < n; count++) // Evaluates n * n * (n) times
{
//O(1) things here.
}
}
}
// T(n) = (n) + (n^2 + n) + n^3
// T(n) = n^3 + n^2 + 2n
// T(n) <= c*f(x)
// n^3 + n^2 + 2n <= c * (n^3)
// O(n) = n^3
我只是不知道如果我做正確。有人可以解釋如何評估這樣的代碼和/或確認我的答案嗎?
你的回答是正確的,但是你爲每個循環計算的迭代次數不是。第一次和第二次迭代次數都是'n'次,第ird重複「n - 1」次。顯然這並不影響結果。 – 2013-05-05 22:29:58
如果您必須使用O(n^3)算法來解決現實世界的問題,那麼情況會非常糟糕。 – john 2013-05-05 22:32:04
@john:這也取決於很多情況和數量'n' :-) – deepmax 2013-05-05 22:34:16