我給了一段代碼並告訴分析它。我感到很困惑。我需要計算foo
運行多少次並使用它來確定n
的函數。我知道foo
運行了多少次,但我無法確定正確的功能。下面是代碼:分析給定的程序
j = 1;
while(j <= n/2)
{
i = 1;
while(i <= j)
{
foo;
i++;
}
j++;
}
我知道在哪裏的n
一半被添加到運行模式foo
運行。因此,例如,當n = 2
,foo
運行1
時候,當n = 4
,foo
運行3
時候,當n = 6
,foo
運行6
倍,等等。事情是這樣的:
n = 2 runs -> j = 1 * 1 run
n = 4 runs -> j = 1 *
j = 2 * * 3 runs
n = 6 runs -> j = 1 *
j = 2 * *
j = 3 * * * 6 runs
n = 8 runs -> j = 1 *
j = 2 * *
j = 3 * * *
j = 4 * * * * 10 runs
也許我只是在想這一點,但我一直盯着我的筆記本好幾個小時,試圖在遵循這種行爲的n
方面提出一些功能。誰能幫忙?
編輯我還有一個問題。我怎麼知道這個函數是在Big-O還是Big-Theta?是否使用while
循環代替for
循環?
重複http://stackoverflow.com/questions/35140945 –
「while循環而不是for循環」?我認爲你需要一個複雜性的入門書。複雜性僅取決於程序所執行的操作次數,而不取決於用於完成相同操作的實際迭代構造。意識到無論你使用for循環還是while循環,操作次數都是相同的。 – Aravind
我看到的一些例子使用'while'循環處理Big-O,因爲如果滿足某些條件它們可以儘早結束。例如,for(int i = 0; i <= n; i ++)'將運行n次,但while(i <= n &&!done)'可能不運行n次,因爲我們有條件'... &&!完成)'。由於它可能會提前結束,我們正在處理Big-O,因爲我們可以結束「小於或等於」「n」次。如果我們有一個循環會執行「n」次,那就意味着Big-Theta。這聽起來是對的嗎? –