Độ phức tạp không gian để tính toán căn chỉnh chuỗi tối ưu cho khoảng cách chỉnh sửa Levenshtein


12

Nếu chúng ta được cung cấp hai chuỗi có kích thước và , thì tính toán khoảng cách chỉnh sửa Levenshtein tiêu chuẩn là bằng thuật toán động với độ phức tạp thời gian và độ phức tạp không gian . (Một số cải tiến có thể được thực hiện như một chức năng của khoảng cách chỉnh sửa , nhưng chúng tôi không giả định rằng đặc biệt nhỏ.) Nếu bạn chỉ quan tâm đến giá trị của khoảng cách chỉnh sửa (nghĩa là số lần chỉnh sửa tối thiểu), a cải tiến nổi tiếng của thuật toán thông thường (trong đó bạn chỉ giữ hàng trước và hàng hiện tại của bảng căn chỉnh) làm giảm độ phức tạp không gian xuống .n 2 O ( n 1 n 2 ) O ( n 1 n 2 ) d d O ( tối đa ( n 1 , n 2 ) )n1n2Ôi(n1n2)Ôi(n1n2)ddÔi(tối đa(n1,n2))

Tuy nhiên, nếu bạn muốn có được các chỉnh sửa thực tế của tập lệnh chỉnh sửa tối ưu, có thể thực hiện tốt hơn việc sử dụng bộ nhớ , có thể phải trả giá bằng thời gian chạy không?Ôi(n1n2)

Câu trả lời:


15

Yuval không cần phải đánh đổi. Toàn bộ chuỗi chỉnh sửa tối ưu có thể được tính trong không gian và không gian , sử dụng hỗn hợp lập trình động và phân chia và chinh phục được mô tả đầu tiên bởi Dan Hirschberg. ( . Một thuật toán không gian tuyến tính để tính subsequences chung tối đa . Commun ACM 18 (6): 341-343, 1975.)O ( n + m )O(nm)O(n+m)

Theo trực giác, ý tưởng của Hirschberg là tính toán một thao tác chỉnh sửa duy nhất giữa chừng trình tự chỉnh sửa tối ưu, và sau đó tính toán đệ quy hai nửa của chuỗi. Nếu chúng ta nghĩ về trình tự chỉnh sửa tối ưu là một đường dẫn từ một góc của bảng ghi nhớ sang góc khác, chúng ta cần một phép lặp lại được sửa đổi để ghi lại nơi đường dẫn này đi qua hàng giữa của bảng. Một lần tái phát hoạt động như sau:

Hmộttôif(Tôi,j)= ={nếu Tôi<m/2jnếu Tôi= =m/2Hmộttôif(Tôi-1,j)nếu Tôi>m/2 và EdTôit(Tôi,j)= =EdTôit(Tôi-1,j)+1Hmộttôif(Tôi,j-1)nếu Tôi>m/2 và EdTôit(Tôi,j)= =EdTôit(Tôi,j-1)+1Hmộttôif(Tôi-1,j-1)nếu không thì

Các giá trị của có thể được tính toán cùng lúc với bảng khoảng cách chỉnh sửa , sử dụng thời gian . Vì mỗi hàng của bảng ghi nhớ chỉ phụ thuộc vào hàng phía trên nó, nên tính toán cả và chỉ yêu cầu không gian .E d i t ( i , j ) O ( m n ) E d i t ( m ,Hmộttôif(Tôi,j)EdTôit(Tôi,j)Ôi(mn)H a l f ( m , nEdTôit(m,n)O ( m + n )Hmộttôif(m,n)Ôi(m+n)

nhập mô tả hình ảnh ở đây

Cuối cùng, trình tự chỉnh sửa tối ưu chuyển đổi các chuỗi đầu vào thành bao gồm các chuỗi tối ưu biến đổi thành theo sau là chuỗi tối ưu biến đổi thành . Nếu chúng ta tính toán hai lần sau đó theo cách đệ quy, thì thời gian chạy tổng thể tuân theo sự tái diễn sau: Không khó để chứng minh rằngMột[1 ..m]B[1 ..n]Một[1..m/2]B[1..Hmộttôif(m,n)]Một[m/2+1..m]B[Hmộttôif(m,n)+1..n]

T(m,n)= ={Ôi(n)nếu m1Ôi(m)nếu n1Ôi(mn)+tối đah(T(m/2,h)+T(m/2,n-h))nếu không thì
T(m,n)= =Ôi(mn). Tương tự, vì chúng ta chỉ yêu cầu không gian cho một lần lập trình động tại một thời điểm, nên tổng không gian bị ràng buộc vẫn là . (Không gian cho ngăn xếp đệ quy là không đáng kể.)Ôi(m+n)

5
Bởi vì tôi đã bỏ lỡ điều này khi Dan hỏi tôi về bài kiểm tra vòng loại của mình, đó là lý do.
Jeffε

tôi nhớ có bài tập này như một bài tập (có hướng dẫn) và nghĩ rằng nó khá tuyệt
Sasho Nikolov

3

Thuật toán bạn mô tả chạy trong không gian thực sự phục hồi lần chỉnh sửa cuối cùng và trạng thái ngay trước lần chỉnh sửa cuối cùng. Vì vậy, nếu bạn chạy thuật toán này lần, bạn có thể khôi phục toàn bộ chuỗi chỉnh sửa, với chi phí tăng thời gian chạy. Nói chung, có một sự đánh đổi không gian thời gian được kiểm soát bởi số lượng hàng bạn giữ lại tại thời điểm đó. Hai điểm cực đoan của sự đánh đổi này là không gian và không gian và giữa chúng, sản phẩm của thời gian và không gian là không đổi (lên đến O lớn).Ôi(n1+n2)Ôi(n1+n2)Ôi(n1n2)Ôi(n1+n2)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.