Cấu trúc dữ liệu bản đồ hiệu quả hỗ trợ tra cứu gần đúng


25

Tôi đang tìm kiếm một cấu trúc dữ liệu hỗ trợ tra cứu khóa gần đúng hiệu quả (ví dụ: khoảng cách Levenshtein cho chuỗi), trả về kết quả khớp gần nhất có thể cho khóa đầu vào. Cấu trúc dữ liệu phù hợp nhất mà tôi tìm thấy cho đến nay là cây Burkhard-Keller , nhưng tôi đã tự hỏi liệu có cấu trúc dữ liệu nào khác / tốt hơn cho mục đích này không.

Chỉnh sửa: Một số chi tiết khác về trường hợp cụ thể của tôi:

  • Các chuỗi thường có sự khác biệt khá lớn Levenshtein với nhau.
  • Chuỗi có độ dài tối đa khoảng 20-30 ký tự, trung bình gần hơn với 10-12.
  • Tôi quan tâm đến việc tra cứu hiệu quả hơn là chèn vì tôi sẽ xây dựng một tập hợp dữ liệu chủ yếu là tĩnh mà tôi muốn truy vấn hiệu quả.

Có bất kỳ điều kiện nào trên chuỗi đầu vào và kích thước của số lượng vật phẩm trong bản đồ không? Làm thế nào hiệu quả để chèn vào bản đồ phải được?
edA-qa mort-ora-y

mrm, theo như tôi có thể nói cây BK vẫn nhìn vào một phần khá lớn của toàn bộ cây. Nhưng đó có thể là tối ưu hóa sớm về phía tôi, tôi đoán vậy?
merijn

3
Liên quan chặt chẽ đến điểm gần như trùng lặp: Cấu trúc dữ liệu hiệu quả để xây dựng trình kiểm tra chính tả nhanh
Raphael

Câu trả lời:


18

Những gì bạn đang tìm kiếm là "gần đúng tìm kiếm hàng xóm" (ANNS) trong khoảng cách Levenshtein / chỉnh sửa. Từ góc độ lý thuyết, khoảng cách chỉnh sửa cho đến nay hóa ra tương đối khó đối với các tìm kiếm gần hàng xóm, afaik. Tuy nhiên, vẫn có nhiều kết quả, xem các tài liệu tham khảo trong bài báo Ostrovsky và Rabani này. Nếu bạn sẵn sàng xem xét các số liệu khoảng cách thay thế mà có các giải pháp đơn giản và tốt hơn, hãy chuyển sang đoạn tiếp theo. Đối với ANNs trong chỉnh sửa khoảng cách, có một kết quả do Indyk , người cho thấy cách để xây dựng một cấu trúc dữ liệu kích thước rằng câu trả lời bất kỳ truy vấn trong thời gianO(d)và báo cáo một chuỗi đó là tối đa là ba lần hơn nữa so với chuỗi gần nhất với chuỗi truy vấn (khái quát này để kích thướcnO(dε)và xấp xỉ31/ε). Ở đâynlà số chuỗi vàdlà độ dài tối đa của bất kỳ chuỗi nào. Bài báo Ostrovsky và Rabani mà tôi đã liên kết ở trên cải thiện kết quả này bằng cách ánh xạ các chuỗi thành vectơ sao cho1nÔi(d)Ôi(d)nÔi(dε)31/εnd1-distance (một loại khoảng cách hình học tự nhiên tương tự như khoảng cách euclide) giữa các vectơ xấp xỉ khoảng cách chỉnh sửa giữa các chuỗi tương ứng (đây được gọi là "nhúng biến dạng thấp"). Khi điều này được thực hiện, cấu trúc dữ liệu ANNS cho có thể được sử dụng và chúng sẽ hiệu quả hơn (xem đoạn tiếp theo).1

Nếu bạn sẵn sàng xem xét các khoảng cách khác, thì băm nhạy cảm cục bộ (LSH) thực hiện công việc tuyệt vời. Băm nhạy cảm cục bộ là một kỹ thuật được Indyk và Motwani tiên phong trong việc giải quyết vấn đề ANNS, trong đó các điểm sống trong một không gian nhiều chiều (đọc các vectơ dài, chuỗi dài, v.v.) được băm vào một số lượng nhỏ các điểm sao cho ở gần nhau được ánh xạ vào cùng một thùng với xác suất tốt và các điểm ở xa nhau được ánh xạ tới các thùng khác nhau, cũng có xác suất tốt. Có một bài viết khảo sát tuyệt vời và rất dễ tiếp cận của Indyk và Andoni trong CACM . Kỹ thuật này đơn giản và nhanh chóng, và có yêu cầu không gian nhỏ; Có mã ngoài đó (tôi nghĩ rằng bài viết liên kết đến mã). Nó hoạt động tốt cho những thứ như khoảng cách Hamming (và trong một số chế độ nhất định khoảng cách) và khoảng cách Euclide, cosin xa. Ngoài ra,Muthu và Sahinalpthiết kế các sơ đồ LSH cho sự khái quát hóa rất tự nhiên về khoảng cách chỉnh sửa,khoảng cách chỉnh sửa khối(trong đó một số thao tác chỉnh sửa có thể hoạt động trên một khối các ký hiệu).1

Loại câu hỏi này phù hợp với cstheory.SE . Có một câu hỏi liên quan ở đó , nhưng nó dường như hỏi chính xác gần hàng xóm.


12

Các cấu trúc dữ liệu bạn quan tâm là cây số liệu. Đó là, họ hỗ trợ tìm kiếm hiệu quả trong không gian số liệu. Một không gian số liệu được hình thành bởi một tập hợp các đối tượng và hàm khoảng cách được xác định trong số chúng thỏa mãn bất đẳng thức tam giác. Sau đó, mục tiêu được đưa ra một tập hợp các đối tượng và một thành phần truy vấn, để truy xuất các đối tượng đó đủ gần với truy vấn.

Vì các vấn đề tìm kiếm có nghĩa đen ở mọi nơi trong khoa học máy tính, có một lượng lớn các cây số liệu khác nhau. Tuy nhiên, chúng có thể được chia ít nhất thành hai nhóm: dựa trên trục và phân cụm (và chắc chắn cũng có các giống lai). Một khảo sát tốt là E. Chavez và cộng sự, Tìm kiếm trong Không gian số liệu, 2001 . Xem ví dụ Chương 5: Giải pháp hiện tại cho không gian số liệu, trang 283.

Ôi(nα)0<α<1Ôi(n2)Ôi(1)

Chavez và cộng sự. cũng cung cấp một cái nhìn tổng quan tốt đẹp về các cây khác, và tự nhiên nhiều tài liệu tham khảo hơn nếu có bất kỳ ai nói riêng làm bạn quan tâm. Trong thực tế, hiệu suất của các cây khác nhau thường được đánh giá bằng thực nghiệm. Điều này tôi nghĩ phụ thuộc rất nhiều vào cấu trúc của không gian. Do đó, thật khó để nói cây nào đặc biệt hiệu quả nhất trong trường hợp của bạn. Tuy nhiên, tôi nghĩ rằng đó là một ý tưởng tốt để đi với người dễ nhất trước tiên. Nếu cây BK là cây dễ xây dựng nhất, hãy thử chúng trước. Nếu họ không đáp ứng yêu cầu của bạn, hãy đầu tư thời gian (và có lẽ là thời gian lập trình) để thu thập thêm thông tin về không gian của bạn có thể giúp bạn đưa ra quyết định sáng suốt hơn.

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.