Рассмотрим следующий код, чтобы переставить строку, содержащую уникальные символы из Макдауэлл:Сложность алгоритма строки перестановки
Этот код основан на рекурсии, и добавляет к каждому результату путем размещения символа к каждому месту. Если строка содержит n символов, то существует n + 1 таких мест.
Поскольку для каждой строки (существуют n! Возможные строки длины n), вы добавляете n + 1 символов, сложность должна быть 1! + 2! + ... + (n + 1)!
Автор говорит, что сложность O (n!). Это то же самое, что и O (1! + ... + (n + 1)!)? Если да, то почему?
public static ArrayList<String> getPerms(String str){
if (str == null){
return null;
}
ArrayList<String> permutations = new ArrayList<String>();
if (str.length() == 0){
permutations.add("");
return permutations;
}
char first = str.charAt(0);
String remainder = str.substring(1);
ArrayList<String> words = getPerms(remainder);
for (String word: words){
for (int j = 0; j <= word.length(); j++){
String s = insertCharAt(word, first, j);
permutations.add(s);
}
}
return permutations;
}
public static String insertCharAt(String s, char c, int j){
String start = s.substring(0, j);
String end = s.substring(j+1);
return start + c + end;
}
no, 'n!' Не является сумматором факториала до n. – chris
как я могу это доказать? – giulio