Tôi đang cố gắng viết một trình kiểm tra chính tả sẽ hoạt động với một từ điển khá lớn. Tôi thực sự muốn một cách hiệu quả để lập chỉ mục dữ liệu từ điển của tôi được sử dụng bằng khoảng cách Damerau-Levenshtein để xác định từ nào gần nhất với từ sai chính tả.
Tôi đang tìm kiếm một cấu trúc dữ liệu, người sẽ cho tôi sự thỏa hiệp tốt nhất giữa độ phức tạp không gian và độ phức tạp thời gian chạy.
Dựa trên những gì tôi tìm thấy trên internet, tôi có một vài khách hàng tiềm năng về loại cấu trúc dữ liệu sẽ sử dụng:
Trie
Đây là suy nghĩ đầu tiên của tôi và có vẻ khá dễ thực hiện và sẽ cung cấp tra cứu / chèn nhanh. Tìm kiếm gần đúng bằng Damerau-Levenshtein cũng nên đơn giản để thực hiện ở đây. Nhưng nó không có vẻ rất hiệu quả về độ phức tạp của không gian vì rất có thể bạn có rất nhiều chi phí với bộ lưu trữ con trỏ.
Patricia Trie
Điều này dường như tiêu tốn ít dung lượng hơn so với Trie thông thường vì về cơ bản bạn đang tránh chi phí lưu trữ con trỏ, nhưng tôi hơi lo lắng về sự phân mảnh dữ liệu trong trường hợp từ điển rất lớn như những gì tôi có.
Cây Suffix
Tôi không chắc chắn về điều này, có vẻ như một số người thấy nó hữu ích trong việc khai thác văn bản, nhưng tôi không thực sự chắc chắn những gì nó sẽ mang lại về mặt hiệu suất cho trình kiểm tra chính tả.
Cây tìm kiếm Ternary
Chúng trông khá đẹp và về độ phức tạp nên gần (tốt hơn?) Với Patricia Tries, nhưng tôi không chắc chắn về sự phân mảnh nếu nó tốt hơn tồi tệ hơn Patricia Tries.
Cây Burst
Đây có vẻ là một loại lai và tôi không chắc nó có lợi thế gì so với Tries và tương tự, nhưng tôi đã đọc nhiều lần rằng nó rất hiệu quả để khai thác văn bản.
Tôi muốn nhận được một số phản hồi về việc cấu trúc dữ liệu nào sẽ được sử dụng tốt nhất trong bối cảnh này và điều gì làm cho nó tốt hơn các cấu trúc khác. Nếu tôi thiếu một số cấu trúc dữ liệu, người thậm chí sẽ thích hợp hơn cho trình kiểm tra chính tả, tôi cũng rất quan tâm.