Hier ist eine Implementierung des Viterbi-Algorithmus die ich vor kurzem "entdeckt" habe. Hier geht es darum, die optimale Verteilung der Bildtypen bei der Videokodierung zu bestimmen. Viterbi selbst ist manchmal ein bisschen schwer zu verstehen, daher denke ich, dass die beste Methode ein konkretes Beispiel ist.
In diesem Beispiel beträgt die maximale Anzahl aufeinanderfolgender B-Frames 2. Alle Pfade müssen mit einem P-Frame enden.
Eine Pfadlänge von 1 ergibt P
als unseren besten Weg, da alle Wege auf einem P-Frame enden müssen, gibt es keine andere Wahl.
Eine Pfadlänge von 2 ergibt BP
y _P
. "_"
ist der beste Weg der Länge 1. Dies gibt uns BP
y PP
. Jetzt berechnen wir die tatsächlichen Kosten. Nehmen wir für dieses Beispiel an, dass BP am besten ist.
Eine Pfadlänge von 3 ergibt BBP
y _B
P und __P
. "__"
ist der beste Weg der Länge 2. Dies gibt uns BBP
y PBP
y BPP
. Jetzt berechnen wir die tatsächlichen Kosten. Nehmen wir für dieses Beispiel an, dass BBP am besten ist.
Eine Pfadlänge von 4 ergibt _BBP
y __BP
y ___P
. "___"
ist der beste Weg der Länge 3. Daraus ergeben sich PBBP, BPBP und BBPP. Nun berechnen wir die tatsächlichen Kosten. Nehmen wir für dieses Beispiel an, dass BPBP der beste Weg ist.
Eine Pfadlänge von 4 ergibt __BBP
y ___BP
y ____P
. "____"
ist der beste Weg der Länge 4. Dies gibt uns BPBBP
y BBPBP
y BPBPP
.
Moment mal - alle Pfade stimmen darin überein, dass das erste Bild ein B
! Der erste Frame ist also ein B
.
Der Vorgang wird so lange wiederholt, bis sie sich einig sind, welcher Frame der erste P-Frame ist, und dann beginnt die Codierung.
Dieser Algorithmus kann an eine Vielzahl von Problemen in vielen Bereichen angepasst werden; es ist auch derselbe Algorithmus, auf den ich in diese Stelle .