簡體   English   中英

這個檢查排列的遞歸 function 的時間復雜度是多少?

[英]What is the time complexity of this recursive function that checks for a permutation?

下面 function 的時間復雜度是多少? 它與長度/字符串檢查的關系如何變化? 我注意到長度為 6 的 function 執行速度很快。 一旦我將字符串增加到“abcdefg”並將長度增加到 7,它就會開始變慢。 您添加的每個附加字符的關系是否呈指數關系?

    public static boolean permutate(String str, int length)
    {
        if (length < 0)
            return false;

        if (str.equals("abcdef"))
            return true;
       

        for(char c = 'a'; c <= 'z'; c++)
        {
            if(permutate(str + c, length - 1))
                return true;
        }

        return false;
    }

看起來像效率O(26^length) ,所以,太可怕了。

function 中的各種頂級if語句是常數時間,所以我們不需要擔心它們,但是for循環每次調用會執行 26 次,並且每次調用它都會再次調用自己,直到length的深度。 因此,總運行時間約為length26次方。 作為復雜性 class,這可以簡化為O(x^n)或“指數”。

你沒有在你的問題中提到這個 function 應該實現什么(它看起來是一種非常低效的方法"abcdef".startsWith(str) ),所以我真的無法幫助優化。

暫無
暫無

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

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