Мне нужна помощь, чтобы понять, как автор получил ответ на проблему 11 в главе Big O.
Проблема следующая:
Следующий код печатает все строки длины k, где символы находятся в отсортированном порядке. Он делает это, генерируя все строки длины k, а затем проверяет, отсортированы ли каждый. Каково его время выполнения?
public static int numChars = 26;
public static void printSortedStrings(int remaining) {
printSortedStrings(remaining, "");
}
public static void printSortedStrings(int remaining, String prefix) {
if (remaining == 0) {
if (isInOrder(prefix)) {
System.out.println(prefix); // Printing the string
}
} else {
for (int i = 0; i < numChars; i++) {
char c = ithLetter(i);
printSortedStrings(remaining - 1, prefix + c);
}
}
}
public static boolean isInOrder(String s) {
for (int i = 1; i < s.length(); i++) {
int prev = ithLetter(s.charAt(i - 1));
int curr = ithLetter(s.charAt(i));
if (prev > curr) {
return false;
}
}
return true;
}
public static char ithLetter(int i) {
return (char) (((int) 'a') + i);
}
public static void main(String[] args) {
printSortedStrings(2);
}
Ответ на бронирование:
O (kc k), где k - длина строки, а c - количество символов в алфавите. Для генерации каждой строки требуется время O (c k). Затем нам нужно проверить, что каждая из них сортируется, что занимает время O (k).
Обратите внимание, что печать строки не учитывается в ответе выше, но я видел обратное в других проблемах.
Когда вы принимаете во внимание печать строки во время выполнения?
Это будет правильный ответ O (k 2 c k)?
Кроме того, следует приветствовать любые советы о том, чтобы быстро сказать, что экспоненциальная часть во время выполнения этого кода будет оценена.:)