Es gibt keine Notwendigkeit für den Kompromiss, den Yuval vorschlägt. Die gesamte optimale Bearbeitungssequenz kann in Zeit und Raum berechnet werden, indem eine Mischung aus dynamischer Programmierung und von Dan Hirschberg beschriebenem Teilen und Erobern verwendet wird. ( Ein linearer Raumalgorithmus zur Berechnung maximaler gemeinsamer Teilsequenzen . Commun. ACM 18 (6): 341–343, 1975.)O ( n + m )O(nm)O(n+m)
Intuitiv besteht Hirschbergs Idee darin, eine einzelne Bearbeitungsoperation in der Mitte der optimalen Bearbeitungssequenz zu berechnen und anschließend die beiden Hälften der Sequenz rekursiv zu berechnen. Wenn wir uns die optimale Bearbeitungssequenz als einen Pfad von einer Ecke der Memo-Tabelle zur anderen vorstellen, benötigen wir eine geänderte Wiederholung, um aufzuzeichnen, wo dieser Pfad die mittlere Zeile der Tabelle kreuzt. Eine Wiederholung, die funktioniert, ist die folgende:
Half(i,j)=⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪∞jHalf(i−1,j)Half(i,j−1)Half(i−1,j−1)if i<m/2if i=m/2if i>m/2 and Edit(i,j)=Edit(i−1,j)+1if i>m/2 and Edit(i,j)=Edit(i,j−1)+1otherwise
Die Werte von können gleichzeitig mit der Editierdistanztabelle unter Verwendung der berechnet werden. Da jede Zeile der Memo-Tabelle nur von der darüber liegenden Zeile abhängt, benötigt die Berechnung von und nur Platz.E d i t ( i , j ) O ( m n ) E d i t ( m , n ) H a l f ( m , n ) O ( m + n )Half(i,j)Edit(i,j)O(mn)Edit(m,n)Half(m,n)O(m+n)
Schließlich besteht die optimale Editiersequenz, die die Eingangsstrings in aus den optimalen Sequenzen, die in gefolgt von der optimalen Sequenz, die in umwandelt . Wenn wir diese beiden Teilfolgen rekursiv berechnen, folgt die Gesamtlaufzeit der folgenden Wiederholung:
Es ist nicht schwer zu beweisen, dassA[1..m]B[1..n]A[1..m/2]B[1..Half(m,n)]A[m/2+1..m]B[Half(m,n)+1..n]
T(m,n)=⎧⎩⎨O(n)O(m)O(mn)+maxh(T(m/2,h)+T(m/2,n−h))if m≤1if n≤1otherwise
T(m,n)=O(mn). In ähnlicher Weise ist der gesamte gebundene Raum immer noch , da nur jeweils ein dynamischer Programmierdurchlauf erforderlich ist . (Der Platz für den Rekursionsstapel ist vernachlässigbar.)
O(m+n)
Der von Ihnen beschriebene Algorithmus, der in Raum die endgültige Bearbeitung und den Status unmittelbar vor der endgültigen Bearbeitung wieder her. Wenn Sie diesen Algorithmus also mal ausführen , können Sie die gesamte Bearbeitungssequenz auf Kosten der Laufzeiterhöhung wiederherstellen. Im Allgemeinen gibt es einen Zeit-Raum-Kompromiss, der durch die Anzahl der Zeilen gesteuert wird, die Sie zu diesem Zeitpunkt behalten. Die beiden Extrempunkte dieses Kompromisses sind Raum und Raum , und zwischen diesen ist das Produkt aus Zeit und Raum konstant (bis zu groß O).O(n1+n2) O(n1+n2) O(n1n2) O(n1+n2)
quelle