Dynamische Programmierung ist eine häufig verwendete algorithmische Idee, mit der viele praktische Probleme gelöst werden können. In diesem Artikel wird vorgestellt, wie dynamische Programmieralgorithmen verwendet werden, um das längste Erhöhungsproblem zu lösen und spezifische Codebeispiele bereitzustellen.
Das am längsten aufsteigende Sub-Sequenz-Problem bezieht sich auf die Suche nach einer Untersequenz in einer bestimmten Ganzzahlsequenz, so dass die Elemente in der Subsequenz in inkrementeller Reihenfolge angeordnet sind und die längste Länge haben. Zum Beispiel in der Sequenz [10, 22, 9, 33, 21, 50, 41, 60, 80] ist die längste Ascender -Sequenz [10, 22, 33, 50, 60, 80] mit einer Länge von 6.
Dynamische Programmieralgorithmen verfolgen normalerweise den Bottom-up-Ansatz, lösen zuerst Unterprobleme und lösen dann allmählich große Probleme. Für das am längsten aufsteigende Sub-Sequenz-Problem können wir DP [i] so einstellen, dass die Länge der längsten aufsteigenden Subsequenz, die mit dem i-ten Element endet, darstellt. Dann lautet die Zustandsübergangsgleichung:
dp [i] = max (dp [j]) + 1, wobei 0 ≤ j <i
Zunächst definieren wir ein Array-DP, initialisieren Sie alle Elemente auf 1, was darauf hinweist, dass jedes Element selbst eine aufsteigende Subsequenz ist. Überqueren Sie dann die NUMS der Eingangsgülle-Sequenz von links nach rechts für jedes Element Nums [i] und durchqueren Sie dann alle Elemente Nums [j] zwischen 0 und I-1. Wenn nums [j] <nums [i] erfüllt sind, wird der Wert von DP [i] aktualisiert. Als nächstes müssen wir nur durch das gesamte DP -Array iterieren und das größte Element finden, dh die Länge der längsten aufsteigenden Subsequenz.
Funktion Länge ($ nums) { $ n = count ($ nums); $ dp = array_fill (0, $ n, 1); für ($ i = 1; $ i <$ n; $ i ++) { für ($ j = 0; $ j <$ i; $ j ++) { if ($ nums [$ j] <$ nums [$ i]) { $ dp [$ i] = max ($ dp [$ i], $ dp [$ j] + 1); } } } $ maxlen = 0; für ($ i = 0; $ i <$ n; $ i ++) { $ maxlen = max ($ maxlen, $ dp [$ i]); } Return $ maxlen; } $ nums = Array (10, 22, 9, 33, 21, 50, 41, 60, 80); $ result = lengthOflis ($ nums); Echo "Die Länge der längsten Ascender -Sequenz ist:". $ Ergebnis;
Im obigen Code nimmt die Funktionslänge eine Ganzzahl -SequenznUMs als Argument und gibt die Länge der längsten aufsteigenden Subsequenz zurück. Im angegebenen Beispiel beträgt der Ausgang 6.
Durch dynamische Programmieralgorithmen können wir das Problem der am längsten aufsteigenden Sequenz effizient lösen. In praktischen Anwendungen wird dieser Algorithmus auch häufig verwendet, wie die Optimierung von Suchmaschinen, Datenkomprimierung und Netzwerkübertragung.
Ich hoffe, dieser Artikel kann Ihnen helfen, dynamische Programmieralgorithmen zu verstehen und auf praktische Probleme flexibel angewendet zu werden.