ไม่จำเป็นต้องมีการแลกเปลี่ยนที่ Yuval แนะนำ ลำดับการแก้ไขที่ดีที่สุดทั้งหมดสามารถคำนวณได้ในเวลาและพื้นที่โดยใช้การผสมผสานของการเขียนโปรแกรมแบบไดนามิกและการแบ่งและพิชิตครั้งแรกโดย Dan Hirschberg ( อัลกอริธึมเชิงเส้นพื้นที่สำหรับการคำนวณลำดับทั่วไปสูงสุดCommun. ACM 18 (6): 341–343, 1975. )O(nm)O(n+m)
โดยสังเขปแนวคิดของ Hirschberg คือการคำนวณการดำเนินการแก้ไขเพียงครั้งเดียวครึ่งทางผ่านลำดับการแก้ไขที่ดีที่สุดจากนั้นคำนวณซ้ำสองส่วนซ้ำ หากเราคิดว่าลำดับการแก้ไขที่ดีที่สุดเป็นเส้นทางจากมุมหนึ่งของตารางบันทึกความจำไปยังอีกมุมมองหนึ่งเราจำเป็นต้องมีการแก้ไขซ้ำเพื่อบันทึกตำแหน่งที่เส้นทางนี้ข้ามแถวกลางของตาราง การเกิดซ้ำที่ใช้งานได้มีดังนี้:
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
ค่าของสามารถคำนวณได้ในเวลาเดียวกันเป็นตารางแก้ไขระยะทางโดยใช้เวลา เนื่องจากแต่ละแถวของตาราง memoization ขึ้นอยู่กับแถวด้านบนเท่านั้นการคำนวณทั้งและต้องใช้พื้นที่เท่านั้นHalf(i,j)Edit(i,j)O(mn)Edit(m,n)Half(m,n)O(m+n)
ในที่สุดลำดับการแก้ไขที่เหมาะสมจะเปลี่ยนสตริงอินพุตเป็นประกอบด้วยลำดับที่ดีที่สุดที่แปลงเป็นตามลำดับที่ดีที่สุดเปลี่ยนเข้าn] หากเราคำนวณทั้งสององค์ประกอบวนซ้ำเวลาทำงานโดยรวมเป็นไปตามการเกิดซ้ำดังต่อไปนี้:
มันไม่ยากที่จะพิสูจน์ว่าA[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). ในทำนองเดียวกันตั้งแต่เราเพียงต้องการพื้นที่สำหรับหนึ่งแบบไดนามิกการเขียนโปรแกรมผ่านในเวลาที่พื้นที่ทั้งหมดที่ถูกผูกไว้ยังคงเป็นn) (พื้นที่สำหรับกองการเรียกซ้ำนั้นเล็กน้อย)
O(m+n)