Potrzebuję pomocy w zrozumieniu, w jaki sposób autor otrzymał odpowiedź na problem 11 w rozdziale "Wielka O.".Zrozumienie notacji Big O - pękanie wywiadu kodowania
Problem wygląda tak:
następujące wydruki Kodeksu wszystkie ciągi o długości k, gdzie znaki są w posortowanych. Czyni to, generując wszystkie ciągi o długości k, a następnie sprawdzając, czy każdy jest posortowany. Jakie jest jego środowisko uruchomieniowe?
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);
}
Book odpowiedź:
O (kc k), gdzie k jest długością łańcucha, a C jest liczba znaków w alfabecie. Trwa O (c k) czas, aby wygenerować każdy ciąg. Następnie musimy sprawdzić, czy każdy z nich jest posortowany, co zabiera czas O (k).
Zauważ, że drukowanie sznurka nie jest brane pod uwagę w powyższej odpowiedzi, ale widziałem przeciwne w innych problemach.
Kiedy bierzesz pod uwagę drukowanie napisu w środowisku wykonawczym?
będzie to poprawna odpowiedź O (k c k)?
Sugerowana jest także jakakolwiek rada dotycząca szybkiego stwierdzenia, że w środowisku wykonawczym tego kodu występuje wykładnicza część. :)
Jak dotrzeć do O (k c k)? Skąd pochodzi "2" (podręcznik zawiera właśnie O (k c k)). – Thilo
Jeśli chcesz wziąć pod uwagę łańcuch, to O (k) dla każdej znalezionej odpowiedzi. Możesz więc liczyć to jako część "sprawdzania" (która jest już O (k) dla każdego kandydata) i nie zwiększa to złożoności. – Thilo
Dlaczego ciąg konkatenacji 'prefix + c' nie wpływa na złożoność? Rozumiem, że sam ma "O (n)". czego mi brakuje? – chalimartines