特定の文字列の順列を出力する次のコードがあります。[簡単にするために、そして私がしようとしていることへの焦点を失わないようにするために、文字列に重複する文字がないと仮定しましょう]
public static int count = 0;
public static void permute(String soFar, String strLeft) {
if(strLeft.length() == 1) {
soFar += strLeft;
System.out.println(++count + " :: " + soFar);
}
for(int i=0; i<strLeft.length(); i++) {
permute(soFar + strLeft.charAt(i), strLeft.substring(0,i) + strLeft.substring(i+1));
}
}
/**
* @param args
*/
public static void main(String[] args) {
String input = "abcd";
permute("",input);
}
このコードの実行時間を把握しようとしています。
これまでの私の思考回路: 繰り返しを書いてみると、
T(n) = n * T(n-1) + O(n) for n > 1
= 1 for n = 1
あります!順列ですが、再帰呼び出しの数は n! を超えています。実際、入力文字列が "abcd" 、つまり 4 文字の例では、permute 関数の呼び出し回数は 65 回です。
このコードの実行時間を見つける方法についての指針はありますか?