次のアルゴリズムのBigOhを知りたい
public List<String> getPermutations(String s){
if(s.length()==1){
List<String> base = new ArrayList<String>();
base.add(String.valueOf(s.charAt(0)));
return base;
}
List<String> combos = createPermsForCurrentChar(s.charAt(0),
getPermutations(s.substring(1));
return combos;
}
private List<String> createPermsForCurrentChar(char a,List<String> temp){
List<String> results = new ArrayList<String>();
for(String tempStr : temp){
for(int i=0;i<tempStr.length();i++){
String prefix = tempStr.substring(0, i);
String suffix = tempStr.substring(i);
results.add(prefix + a + suffix);
}
}
return results;
}
ここで、getPermutationsはn回と呼ばれます。ここで、nは文字列の長さです。私の理解では、createPermutationsはO(l * m)です。ここで、lはリストtempの長さ、mはtemp内の各文字列の長さです。
ただし、最悪の場合の分析を検討しているため、m<=nおよびl<=n!です。一時リストの長さは、再帰呼び出しごとに増え続け、一時の各文字列の文字数も増え続けます。
これは、このアルゴリズムの時間計算量がO(n * n!* n)であることを意味しますか?それともO(n * n * n)ですか?