Thuật toán hiệu quả cho khoảng cách chỉnh sửa cho các chuỗi ngắn


7

Tôi có một ứng dụng cần tính toán hàng tỷ khoảng cách levenshtein giữa các cặp chuỗi. Các chuỗi là các chuỗi DNA ngắn (dài 70), chỉ bao gồm 4 ký tự. Ngoài ra, có thể giả định rằng một trong các chuỗi là cố định, nghĩa là chúng ta đang so sánh một chuỗi cố định với một tỷ chuỗi khác.

Tôi biết rằng việc triển khai lập trình động của khoảng cách levenshtein là , muốn biết liệu có chỗ nào cần cải thiện không. Tôi tìm thấy hai thuật toán:O(mn)

  • O(n+d2)Thuật toán , trong đó là khoảng cách chỉnh sửa của Berghel et al . Tuy nhiên tôi không thể đưa ra giả định rằng nhỏ nên nó có thể không mang lại lợi thế nàodd
  • log(n)O(1/ϵ) xấp xỉ trong thời gian của Andoni et al . Nhưng tôi có hai mối quan tâm về điều này: n1+ϵ
    • Là thuật toán này cũng nhanh trong thực tế?
    • Liệu có nghĩa là khoảng cách chỉnh sửa được tính toán trong trường hợp xấu nhất là lần so với thực tế ? Trong trường hợp đó là quá nhiều.log(n)O(1/ϵ)log(n)O(1/ϵ)

Bạn có biết bất kỳ thuật toán / ý tưởng / cách tiếp cận nào khác có thể áp dụng không?


2
Bạn đã xem Levenshtein automata chưa?
adrianN

Liệu nó có phải chính xác là khoảng cách Levenshtein, hay bất kỳ khoảng cách chỉnh sửa tương đối phù hợp nào đủ tốt?
Pål GD

Bạn chỉ quan tâm đến khoảng cách chỉnh sửa nếu khoảng cách chỉnh sửa nằm dưới ngưỡng nào đó (ví dụ: nếu khoảng cách chỉnh sửa , bạn không quan tâm khoảng cách chỉnh sửa chính xác là gì; chỉ cần biết rằng đó là đủ)? >20>20
DW

Là DNA thực sự tương tự Levenshtein. 11 so với 00 là 2 đối với Levenshtein nhưng 10 so với 01 chỉ là 1. Tôi sẽ thực sự ngạc nhiên với DNA một trận đấu hay không là tất cả vấn đề.
paparazzo

@ PålGD một xấp xỉ tốt khoảng cách Levenshtein cũng có thể là tốt.
Ameer Jewdaki

Câu trả lời:


3

Một cách tiếp cận là xây dựng một máy tự động Levenshtein cho chuỗi cố định (xem, ví dụ, ở đây ). Cho một chuỗix và một khoảng cáchD, bạn có thể xây dựng một DFA nhận ra tất cả các chuỗi ở khoảng cách xa D từ x. Vì vậy, bạn có thể kiểm tra xem một chuỗi có gần vớix trong O(n) thời gian, ở đâu nlà độ dài của chuỗi. Tôi không chắc yêu cầu không gian là gì để lưu trữ DFA (chúng là tuyến tính trongm,n, nhưng có thể theo cấp số nhân trong D).

Ngoài ra, bạn có thể sử dụng thuật toán "xuất phát sớm" để tính toán khoảng cách chỉnh sửa. Bạn đã đề cập rằng bạn chỉ quan tâm đến khoảng cách chỉnh sửa nếu nó nhỏ hơn một số ngưỡngD. Có một thuật toán "xuất phát sớm" để tính toán khoảng cách chỉnh sửa có thời gian chạy làO(max(n,m)×D), Mà tính toán chỉnh sửa khoảng cách nếu nó là hoặc đầu ra khác "quá lớn" nếu nó là . Về cơ bản, bạn làm như thuật toán quy hoạch động tiêu chuẩn cho chỉnh sửa khoảng cách, nhưng chỉ tính toán các yếu tố của ma trận là ra khỏi đường chéo. Trong trường hợp của bạn, điều này có thể hoặc có thể không tốt hơn các lựa chọn thay thế khác.D>DD


-1

Nếu tôi phải làm hàng tỷ và chỉ có 4 ký tự thì tôi sẽ đại diện cho các ký tự là
1000
0100
0010
0001
Đó là số nguyên 35 byte

Chấm một chút khôn ngoan andvà đếm 1

Không hoàn hảo nhưng hàng tỷ là rất nhiều trừ khi bạn ném rất nhiều CPU vào nó.


1
Đó thực sự là một số hàng nghìn tỷ cuộc gọi từ xa, nhưng tôi có quyền truy cập vào một cụm máy tính. Vấn đề là nếu hai chuỗi có độ dài 100 và có một vài lần chèn hoặc xóa thì sản phẩm dấu chấm sẽ lệch khỏi khoảng cách thực tế.
Ameer Jewdaki

OK bạn đã nói 70 chiều dài. Tôi ngạc nhiên một thuật toán dựa trên các từ áp dụng cho DNA. Các phương trình phù hợp với DNA khoa học - Tôi ngạc nhiên khi bạn không sử dụng một trong những phương trình đó.
paparazzo

Không phàn nàn nhưng một DV không giúp tôi trở thành người đóng góp tốt hơn ở đây.
paparazzo

Tôi đã không bỏ phiếu trả lời. Trong thực tế tôi nghĩ rằng nó nói chung là một cách tiếp cận tốt, nhưng ở đây nó quá xa vời vì chèn / xóa.
Ameer Jewdaki

và vâng, có những cách xác suất để xác định khoảng cách giữa hai chuỗi DNA nhưng không, tôi tin rằng, việc tính toán đơn giản hơn so với khoảng cách chỉnh sửa. Vì vậy, ở đây tôi chỉ bắt đầu với biện pháp "đơn giản"
Ameer Jewdaki
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.