2014-11-02 113 views
4

考慮到這一塊的Java代碼:計算算法的複雜性(無限的算法)

import java.util.Scanner; 

class BreakWhileLoop { 
    public static void main(String[] args) { 
    int n; 

    Scanner input = new Scanner(System.in); 

    while (true) { 
     System.out.println("Input an integer"); 
     n = input.nextInt(); 

     if (n == 0) { 
     break; 
     } 
     System.out.println("You entered " + n); 
    } 
    } 
} 

讓我們這種特殊情況下:the user will always enter any integer except 0

1.我可以將此代碼視爲算法嗎?

2.如果是,如何計算其複雜性?

由於

+0

呃..問這些問題:1)這個算法做什麼? 2)這個算法運行什麼數據? – Rotem 2014-11-02 10:26:59

+0

當它甚至沒有終止時,談論它的複雜性是否有意義?沒有什麼可以與任何東西成比例的。 – harold 2014-11-02 10:27:49

+2

要計算時間複雜性,您必須知道輸入數據。所以如果你知道什麼數字序列,以零結束,用戶填入這個「算法」,那麼它是線性的。但說實話,把它稱爲算法沒有多大意義...... – 2014-11-02 10:30:25

回答

6

爲了避免微不足道的答案,讓我們通過刪除except 0條件來放寬問題陳述。我們可以稱它爲0 acceptor

假設用戶輸入需要一定的時間,則時間複雜度爲O(N),其中N是非零序列的長度。

+0

顯然,如果'N'是無界的,複雜性也是如此。 – 2014-11-02 10:53:02

2

它將永遠運行。時間複雜度用於根據輸入指定算法運行時間的上限。由於無論輸入什麼內容,您的代碼都將永遠運行,因此談論其時間複雜性是毫無意義的。

+0

但讓我們考慮一下,我們有一個包含上述代碼的長算法,是不是邏輯上不談時間複雜度? – MCHAppy 2014-11-02 10:34:18

+0

正如我所說的,時間複雜度用於根據用戶輸入指定上限時間限制。談論保證永久運行的代碼的時間複雜性是毫無意義的。 – 2014-11-02 10:36:31

0

交互是比基於規則的計算機問題解決算法更強大的範例,推翻了普遍認爲所有計算都可以用算法表達的觀點。

你可以按照this renowned article by Wegner的細節和證明這是「爲什麼交互功能比算法更強大?」