Tidak perlu untuk tradeoff yang disarankan Yuval. Keseluruhan urutan pengeditan yang optimal dapat dihitung dalam waktu dan ruang , menggunakan campuran pemrograman dinamis dan divide-and-conquer yang pertama kali dijelaskan oleh Dan Hirschberg. ( Algoritma ruang linear untuk menghitung urutan umum maksimal. Kom. ACM 18 (6): 341-343, 1975.)O ( n + m )O(nm)O(n+m)
Secara intuitif, ide Hirschberg adalah untuk menghitung operasi pengeditan tunggal setengah jalan melalui urutan pengeditan yang optimal, dan kemudian secara rekursif menghitung dua bagian dari urutan. Jika kita menganggap urutan edit optimal sebagai jalur dari satu sudut tabel memoisasi ke sudut lainnya, kita perlu pengulangan yang dimodifikasi untuk merekam di mana jalur ini melintasi baris tengah tabel. Satu pengulangan yang berfungsi adalah sebagai berikut:
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
Nilai-nilai dapat dihitung pada waktu yang sama dengan tabel edit jarak , menggunakan waktu . Karena setiap baris tabel memoisasi hanya bergantung pada baris di atasnya, menghitung dan hanya membutuhkan ruang .Half(i,j)Edit(i,j)O(mn)Edit(m,n)Half(m,n)O(m+n)
Akhirnya, urutan pengeditan optimal mengubah string input menjadi terdiri dari urutan optimal yang mengubah menjadi diikuti oleh urutan optimal yang mengubah menjadi . Jika kita menghitung kedua urutan secara rekursif, keseluruhan waktu berjalan mematuhi perulangan berikut:
Tidak sulit untuk membuktikan bahwaA[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
O ( m + n )T(m,n)=O(mn). Demikian pula, karena kita hanya membutuhkan ruang untuk satu lintasan pemrograman dinamis pada satu waktu, batas total ruang masih . (Ruang untuk tumpukan rekursi dapat diabaikan.)
O(m+n)