ความซับซ้อนของพื้นที่เพื่อคำนวณการจัดเรียงสตริงที่เหมาะสมสำหรับระยะทางแก้ไขของ Levenshtein


12

ถ้าเราจะได้รับสองสายที่มีขนาดและn 2มาตรฐาน Levenshtein คำนวณระยะทางแก้ไขโดยอัลกอริทึมแบบไดนามิกที่มีความซับซ้อนเวลาO ( n 1 n 2 )และความซับซ้อนของพื้นที่O ( n 1 n 2 ) (การปรับปรุงบางอย่างสามารถทำได้ในรูปแบบของระยะทางแก้ไขdแต่เราไม่ได้สมมุติบนdn1n2O(n1n2)O(n1n2)ddO(max(n1,n2))

อย่างไรก็ตามหากคุณต้องการได้รับการแก้ไขจริงของสคริปต์การแก้ไขที่ดีที่สุดเป็นไปได้ไหมที่จะทำได้ดีกว่าการใช้หน่วยความจำอาจต้องใช้เวลานานหรือไม่O(n1n2)

คำตอบ:


15

ไม่จำเป็นต้องมีการแลกเปลี่ยนที่ Yuval แนะนำ ลำดับการแก้ไขที่ดีที่สุดทั้งหมดสามารถคำนวณได้ในเวลาและพื้นที่โดยใช้การผสมผสานของการเขียนโปรแกรมแบบไดนามิกและการแบ่งและพิชิตครั้งแรกโดย Dan Hirschberg ( อัลกอริธึมเชิงเส้นพื้นที่สำหรับการคำนวณลำดับทั่วไปสูงสุดCommun. ACM 18 (6): 341–343, 1975. )O(nm)O(n+m)

โดยสังเขปแนวคิดของ Hirschberg คือการคำนวณการดำเนินการแก้ไขเพียงครั้งเดียวครึ่งทางผ่านลำดับการแก้ไขที่ดีที่สุดจากนั้นคำนวณซ้ำสองส่วนซ้ำ หากเราคิดว่าลำดับการแก้ไขที่ดีที่สุดเป็นเส้นทางจากมุมหนึ่งของตารางบันทึกความจำไปยังอีกมุมมองหนึ่งเราจำเป็นต้องมีการแก้ไขซ้ำเพื่อบันทึกตำแหน่งที่เส้นทางนี้ข้ามแถวกลางของตาราง การเกิดซ้ำที่ใช้งานได้มีดังนี้:

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

ค่าของสามารถคำนวณได้ในเวลาเดียวกันเป็นตารางแก้ไขระยะทางโดยใช้เวลา เนื่องจากแต่ละแถวของตาราง 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)if m1O(m)if n1O(mn)+maxh(T(m/2,h)+T(m/2,nh))otherwise
T(m,n)=O(mn). ในทำนองเดียวกันตั้งแต่เราเพียงต้องการพื้นที่สำหรับหนึ่งแบบไดนามิกการเขียนโปรแกรมผ่านในเวลาที่พื้นที่ทั้งหมดที่ถูกผูกไว้ยังคงเป็นn) (พื้นที่สำหรับกองการเรียกซ้ำนั้นเล็กน้อย)O(m+n)

5
เพราะฉันพลาดสิ่งนี้เมื่อแดนถามฉันในการสอบที่มีคุณสมบัติครบนั่นคือเหตุผล
Jeffε

ฉันจำได้ว่านี่เป็นแบบฝึกหัด (นำทาง) และคิดว่ามันค่อนข้างเท่ห์
Sasho Nikolov

3

อัลกอริทึมที่คุณอธิบายว่าทำงานในพื้นที่กู้คืนการแก้ไขขั้นสุดท้ายจริง ๆ และสถานะก่อนการแก้ไขขั้นสุดท้าย ดังนั้นหากคุณเรียกใช้อัลกอริทึมนี้ครั้งคุณสามารถกู้คืนลำดับการแก้ไขทั้งหมดโดยมีค่าใช้จ่ายในการเพิ่มรันไทม์ โดยทั่วไปจะมีการแลกเปลี่ยนพื้นที่เวลาซึ่งควบคุมโดยจำนวนแถวที่คุณเก็บไว้ในเวลานั้น จุดสุดยอดสองจุดของการแลกเปลี่ยนนี้คือ spaceและ spaceและระหว่างนี้ผลิตภัณฑ์ของเวลาและพื้นที่คงที่ (มากถึง O ใหญ่)O(n1+n2)O(n1+n2)O(n1n2)O(n1+n2)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.