Speicherplatzkomplexität zur Berechnung der optimalen Zeichenfolgenausrichtung für den Levenshtein-Bearbeitungsabstand

12

Wenn wir zwei Zeichenfolgen der Größe und , erfolgt die Standardberechnung der Levenshtein-Editierentfernung durch einen dynamischen Algorithmus mit der Zeitkomplexität und der Raumkomplexität . (Einige Verbesserungen können in Abhängigkeit von der Bearbeitungsentfernung , wir gehen jedoch nicht davon aus, dass besonders klein ist.) Wenn Sie nur am Wert der Bearbeitungsentfernung interessiert sind (dh an der minimalen Anzahl von Bearbeitungen), a Die bekannte Verbesserung des üblichen Algorithmus (bei dem nur die vorherige und die aktuelle Zeile der Ausrichtungstabelle beibehalten werden) reduziert die Platzkomplexität auf .n 2 O ( n 1 n 2 ) O ( n 1 n 2 ) d d O ( max ( n 1 , n 2 ) )n1n2O(n1n2)O(n1n2)ddO(max(n1,n2))

Wenn Sie jedoch die tatsächlichen Änderungen eines optimalen Bearbeitungsskripts erhalten möchten, ist es möglich, eine bessere Speicherauslastung als erzielen , möglicherweise auf Kosten der Laufzeit?O(n1n2)

a3nm
quelle

Antworten:

15

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)={if i<m/2jif i=m/2Half(i1,j)if i>m/2 and Edit(i,j)=Edit(i1,j)+1Half(i,j1)if i>m/2 and Edit(i,j)=Edit(i,j1)+1Half(i1,j1)otherwise

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)

Bildbeschreibung hier eingeben

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)if m1O(m)if n1O(mn)+maxh(T(m/2,h)+T(m/2,nh))otherwise
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)
Jeffε
quelle
5
Weil ich das verpasst habe, als Dan mich zu meiner Eignungsprüfung befragt hat, ist das der Grund.
Jeffs
Ich erinnere mich, dass ich dies als (geführte) Übung hatte und dachte, dass es ziemlich cool war
Sasho Nikolov
3

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)

Yuval Filmus
quelle