for (int i=0; i<n; i++)
這個時間複雜度爲O(n)
。
for (int i=0; i<n; i++)
for (int j=0; j<n; j++)
for (k=0; k<n; k++)
這是O(n^3)
對不對?
i=1
do
//......
i++
while (i*2 <n)
是這樣的O(n)
?或者它確切地說是O(n/2)
?
for (int i=0; i<n; i++)
這個時間複雜度爲O(n)
。
for (int i=0; i<n; i++)
for (int j=0; j<n; j++)
for (k=0; k<n; k++)
這是O(n^3)
對不對?
i=1
do
//......
i++
while (i*2 <n)
是這樣的O(n)
?或者它確切地說是O(n/2)
?
O(n/2)
是O(n)
僅具有1/2的常數係數。係數可以是100億,它仍然是O(n)
,而不是例如。 O(n^(1.0001))
這是一個不同的複雜等級。
謝謝你的答覆! – anna 2013-03-23 05:14:32
第一個O(n ),你是對的。
你的第二算法是爲O(n/2)=O(Cn)的 = 爲O(n)。 1/2是一個常量,所以我們可以安全地丟棄它。
哦,我明白了。非常感謝你:) – anna 2013-03-23 05:14:02
的代碼將該片段:
i=1
do
//......
i++
while (i*2 < n);
等同於一個:
for (i = 1; i < n/2 ; ++ i);
從表面上看,這是O(n)
。
1/2是一個常數。 O(n/2)= O(n)。 – FatalError 2013-03-23 04:53:43