2013-11-25 97 views
1

for(int i=0; i<n; i++) { blah; } < ==這有一個複雜度O(n)的算法複雜混亂

但是,如果你知道電量爲3前手不會複雜變成O(1),我的意思是我可以只寫出示說明3次。

blah; 
blah; 
blah; 

,而如果你不知道N.有多大你運行程序之前那麼它不可能在後者的方式寫下來的說明。

請澄清我的錯誤觀念,如果我有。

+2

你幾乎可以解釋它,什麼是誤解? – amit

+1

@Operative你運行的語句的數量隨着n線性增加,因此即使你編寫硬編碼,它仍然是O(n)。 –

回答

2

首先,第一個週期的複雜性是O(n * <complexity of blah>)。其次,這是假設n是您的算法的輸入參數。如果n是事先知道的常數,則您的估計值爲O(<complexity of blah>)是正確的。

1

算法的時間複雜度僅對輸入大小有意義(在第一個示例中爲n)。如果一個算法沒有收到任何輸入,例如blah; blah; blah;,那麼顯然它的運行時間將是恆定的並且與輸入大小無關。

1

在長度遞增的輸入序列的上下文中,算法具有時間複雜度O(1)O(n)或其他任何值。因此,爲了說明覆雜性,該算法必須能夠接受任意長的輸入。如果您要求輸入長度僅爲3,那麼談論算法的複雜性就沒有意義了。