[英]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
的深度。 因此,總運行時間約為length
的26
次方。 作為復雜性 class,這可以簡化為O(x^n)
或“指數”。
你沒有在你的問題中提到這個 function 應該實現什么(它看起來是一種非常低效的方法"abcdef".startsWith(str)
),所以我真的無法幫助優化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.