我想知道如果任何人都可以向我解釋分析程序的語義。我知道如何做簡單的,但是有一些更復雜的我不知道該怎麼做。例如,這是我書中的一個問題。我們給出6個小片段,並告訴他們分析:分析程序
(1). sum = 0;
for(i = 0; i < n; ++i)
++sum;
(2). sum = 0;
for(i = 0; i < n; ++i)
for(j = 0; j < n; ++j)
++sum;
(3). sum = 0;
for(i = 0; i < n; ++i)
for(j = 0; j < n * n; ++j)
++sum;
(4). sum = 0;
for(i = 0; i < n; ++i)
for(j = 0; j < i; ++j)
++sum;
(5). sum = 0;
for(i = 0; i < n; ++i)
for(j = 0; j < i * i; ++j)
for(k = 0; k < j; ++k)
++sum;
(6). sum = 0;
for(i = 1; i < n; ++i)
for(j = 1; j < i * i; ++j)
if(j % i == 0)
for(k = 0; k < j; ++k)
++sum;
我明白了1,2,和4那些部分是容易的。我沒有得到的是3,5和6.
1運行n
次,所以一個在Big-Oh(n)
。 2有兩個for
環路,每個環路運行n
次,因此這一個是Big-Oh(n^2)
。 4是我以前見過的東西。內循環的運行次數與i
的值相同。所以,如果i = 1
然後循環運行一次,如果i = 2
的環路的1 + 2 + 3 + ... + n
一個patters這意味着這整個這是Big-Oh(n^2)
模式運行兩次。我不確定如何在條件中使用n * n
約3。這也是我不確定如何在那裏也會用i * i
去約5的原因。至於6,我們不僅有i * i
,但也有一個if
聲明,可能會或可能不會運行。我該怎麼做?任何人都可以幫助解釋如何做那些?謝謝。
UPDATE我靈機一動約3.在一個環路外運行n
倍,內部的循環運行n^2
倍。那麼對於那個,我們會有n * n^2
這是n^3
?那麼那個會在Big-Oh(n^3)
?
不要問一個3個不同的問題。問一個,從答案中學習,如果你不能得到答案 –
爲什麼問三個不同的問題,並在問題板上佔用更多空間?如果你不喜歡這個,那麼繼續下一個問題。 – GenericUser01
,因爲這裏有規則,其中一個規則是在一個問題中不要問很多問題。仔細閱讀,我沒有告訴你同時用3個問題污染現場。他們都是相似的,所以問一個,等待答案,閱讀嘗試理解。用你剛剛掌握的知識來處理你的下一個問題 –