Sie erhalten eine Zeichenfolge, z. "acdfdcqqc"
und müssen einen Algorithmus erstellen, um den größten palindromischen Teilstring zu finden, in unserem Fall "cdfdc"
. Es ist einfach, eine O (n^2) Algorithmus, der durch Erstellen eines Arrays der Größe 2 N, und jedes Mal die Berechnung der Länge der größten Palindrom mit diesem Punkt für die Mitte dh ersinnen:Finde die größte palindromische Teilkette, Komplexität des Algorithmus
a - c - d - f - d - c - q - q - c
1 0 1 0 1 0 5 0 1 0 1 0 1 4 1 0 1
Für jede der 2n möglichen Start Punkte Ich bewege mich in beide Richtungen und finde die Länge des größten Palindroms, beginnend an dieser Position. Für jede der 2n-Operationen mache ich also höchstens O (n) -Operationen, daher die O (n^2) -Zeitkomplexität.
Ich weiß, dass es in linearer Zeit mit einem schickeren Algo getan werden kann: https://en.wikipedia.org/wiki/Longest_palindromic_substring.
Aber angenommen, dass die Zeichenfolge, die wir behandeln, aus natürlichem englischen Text extrahiert werden. Wenn wir eine Position zufällig in einem englischen Text auswählen, ist die erwartete Symmetrie, die wir erwarten könnten, ziemlich niedrig. Ich würde sogar sagen, dass die erwartete Symmetrie von weniger als einem Zeichen auf jeder Seite ist. Daher ist es in Ordnung für mich zu sagen, dass mein Algorithmus 2n mal konstante Operationen mit konstanter Zeit macht, wodurch der Algorithmus O (n) im Durchschnitt?
Das ist * nicht * was "erwartete" Zeit bedeutet. Du beschreibst "Worst-Case" -Zeit. Quicksort wird erwartet O (n log n); Hash-Table-Lookup wird erwartet O (n); diese werden beide häufig gehört. (Worst-Case sind O (n²) und O (n) bzw. Was ist für Ihre Anwendungsfälle nützlicher?) – rici
@rici, Während Quicksort Worst-Case-Zeit ist O (n²) ist seine erwartete Laufzeit O (n) * an jedem Eingang *. Schlechte Eingaben sind nicht selten, sie existieren nicht. Der in der Frage beschriebene Algorithmus nimmt andererseits an, dass die Mehrheit der Eingaben "gut" ist, und deshalb läuft er normalerweise in O (n). Aber nicht in Erwartung. Quicksort ist wegen seiner internen Zufälligkeit schnell, nicht wegen der Verteilung seiner Eingaben. – snakile
Ich habe über all diese Algorithmen über planare Graphen nachgedacht, die die Eurler-Formel verwenden (die nur für planare Graphen arbeitet), um die durchschnittliche Komplexität zu finden. Sie behandeln nicht die allgemeinsten Fälle von Graphen. Es scheint in Ordnung zu sein, einige Vorkenntnisse in die Berechnung der durchschnittlichen Zeitkomplexität einzubetten, solange es in der Aussage klar ist, dass wir nur von einer Teilmenge der Fälle betroffen sind. Nein ? – user3091275