簡體   English   中英

下面程序的時間復雜度是多少?

[英]What's the time complexity of below program?

這個程序的時間復雜度是多少? 我們根據任意大的輸入計算時間復雜度。 在這個例子中,輸入字符串可能非常大,但如果它沒有空格,那么它只是 O(n)。 如果字符串有空格,它將是 O(n * numberOfWords),我可以將其視為 O(n^2) 時間復雜度嗎? 先感謝您!

    public static String revEachWord(String str) {
        String reversed = "";
        String[] words = str.split(" ");
        
        for(String word : words) {
            String reversedWord = "";
            for(int i = word.length() - 1; i >= 0; i--) {
                reversedWord += word.charAt(i);
            }

            reversed += reversedWord + " ";
        }
        
        return reversed.trim();
    }

Aleksey指出它是O(numberOfWords * averageWordLength) 這是正確的(如果我們暫時忽略+= ),但更一般的答案是輸入的長度n 由於n = numberOfWords * averageWordLength ,我們可以說它是O(n)或線性的。

但這並不完全正確。 正如chrylis在評論中指出的那樣,由於您使用+=來構建字符串,因此需要更長的時間:每個副本的O(n)numberOfWords總副本,對於O(n * numberOfWords)總計,或O(n^2)在最壞的情況下。 (實際上,它可能比這更糟;我沒有考慮嵌套循環中的+= 。)哎呀。 最好開始使用StringBuilder以獲得良好的O(n)運行時間。

O(numberOfWords * averageWordLength)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM