for(int i=0; i<n; i++) { blah; }
< ==這有一個複雜度O(n)的算法複雜混亂
但是,如果你知道電量爲3前手不會複雜變成O(1),我的意思是我可以只寫出示說明3次。
blah;
blah;
blah;
,而如果你不知道N.有多大你運行程序之前那麼它不可能在後者的方式寫下來的說明。
請澄清我的錯誤觀念,如果我有。
for(int i=0; i<n; i++) { blah; }
< ==這有一個複雜度O(n)的算法複雜混亂
但是,如果你知道電量爲3前手不會複雜變成O(1),我的意思是我可以只寫出示說明3次。
blah;
blah;
blah;
,而如果你不知道N.有多大你運行程序之前那麼它不可能在後者的方式寫下來的說明。
請澄清我的錯誤觀念,如果我有。
首先,第一個週期的複雜性是O(n * <complexity of blah>)
。其次,這是假設n是您的算法的輸入參數。如果n是事先知道的常數,則您的估計值爲O(<complexity of blah>)
是正確的。
算法的時間複雜度僅對輸入大小有意義(在第一個示例中爲n
)。如果一個算法沒有收到任何輸入,例如blah; blah; blah;
,那麼顯然它的運行時間將是恆定的並且與輸入大小無關。
在長度遞增的輸入序列的上下文中,算法具有時間複雜度O(1)
或O(n)
或其他任何值。因此,爲了說明覆雜性,該算法必須能夠接受任意長的輸入。如果您要求輸入長度僅爲3,那麼談論算法的複雜性就沒有意義了。
你幾乎可以解釋它,什麼是誤解? – amit
@Operative你運行的語句的數量隨着n線性增加,因此即使你編寫硬編碼,它仍然是O(n)。 –