Yuval nie ma potrzeby kompromisu. Całą optymalną sekwencję edycji można obliczyć w czasie i przestrzeni , używając mieszanki programowania dynamicznego oraz funkcji dziel i zwyciężaj, opisanej po raz pierwszy przez Dana Hirschberga. ( Algorytm przestrzeni liniowej do obliczania maksymalnych wspólnych podsekwencji. Commun. ACM 18 (6): 341–343, 1975.)O ( n + m )O ( n m )O ( n + m )
Intuicyjnie pomysł Hirschberga polega na obliczeniu pojedynczej operacji edycji w połowie optymalnej sekwencji edycji, a następnie rekurencyjnym obliczeniu dwóch połówek sekwencji. Jeśli myślimy o optymalnej sekwencji edycji jako ścieżce od jednego rogu tabeli do zapamiętywania do drugiego, potrzebujemy zmodyfikowanego cyklu, aby zapisać, gdzie ta ścieżka przecina środkowy rząd tabeli. Jednym z powtarzających się działań jest:
H.a l f( i , j ) = ⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪∞jotH.a l f( i - 1 , j )H.a l f(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
Wartości można obliczyć w tym samym czasie, co edytowanie tabeli odległości , stosując czas . Ponieważ każdy wiersz tabeli zapamiętywania zależy tylko od wiersza nad nim, obliczenie zarówno i wymaga tylko miejsca .E d i t ( i , j ) O ( m n ) E d i t ( m , n ) H a l f ( m , n ) O ( m + n )H.a l f( i , j )mirei t ( i , j )O ( m n )mirei t ( m , n )H.a l f( m , n )O ( m + n )
Wreszcie optymalna sekwencja edycji przekształcająca ciągi wejściowe na składa się z optymalnych sekwencji przekształcających na a następnie optymalna sekwencja transformująca w . Jeśli rekurencyjnie obliczymy te dwa podsekwencje, całkowity czas działania będzie zgodny z następującą powtarzalnością:
Nietrudno udowodnić, żeB [ 1 .. n ] A [ 1 . . m / 2 ] B [ 1 . . H a l f ( m , n ) ] A [ m / 2 + 1 . . m ] B [ H a l f ( m , n ) + 1 . . nA [ 1 .. m ]B [ 1 .. n ]A [ 1 . . m / 2 ]B [ 1 . . H.a l f( m , n ) ]A [ m / 2 + 1 . . m ]T ( m , n ) = { O ( n ) jeśli m ≤ 1 O ( m ) jeśli n ≤ 1 O ( m n ) + max h ( T ( m / 2 , h ) + T ( m / 2 , n - h ) ) w innym przypadku T ( m , nB [ Ha l f( m , n ) + 1 . . n ]
T.( m , n ) = ⎧⎩⎨O ( n )O ( m )O ( m n ) + maksh( T( m / 2 , h ) + T.( m / 2 , n - h ) )jeśli m ≤ 1jeśli n ≤ 1Inaczej
T.( m , n ) = O ( m n ). Podobnie, ponieważ potrzebujemy miejsca tylko na jedno przejście programowania dynamicznego naraz, łączna przestrzeń ograniczona jest nadal . (Miejsce na stos rekurencyjny jest znikome.)
O ( m + n )