Đối với các tập dữ liệu lớn, một ứng cử viên tốt cho chương trình phụ trợ sẽ là cây tìm kiếm Ternary. Chúng kết hợp tốt nhất trong hai thế giới: chi phí không gian thấp của cây tìm kiếm nhị phân và hiệu quả thời gian dựa trên ký tự của các tìm kiếm kỹ thuật số.
Xem trong TS Dobbs Journal: http://www.ddj.com/windows/184410528
Mục đích là việc thu hồi nhanh chóng của một resultset hữu hạn như các loại dùng trong Cho phép đầu tiên cho rằng để tìm kiếm "khoa học máy tính" bạn có thể gõ từ "máy tính". hoặc "khoa học" nhưng không phải "máy tính". Vì vậy, đưa ra một cụm từ, tạo các cụm từ con bắt đầu bằng một từ. Bây giờ cho mỗi cụm từ, hãy đưa chúng vào TST (cây tìm kiếm bậc ba). Mỗi nút trong TST sẽ đại diện cho một tiền tố của một cụm từ đã được gõ cho đến nay. Chúng tôi sẽ lưu trữ 10 kết quả tốt nhất (nói) cho tiền tố đó trong nút đó. Nếu có nhiều ứng cử viên hơn số lượng kết quả hữu hạn (10 ở đây) cho một nút, cần có một hàm xếp hạng để giải quyết sự cạnh tranh giữa hai kết quả.
Cây có thể được xây dựng sau mỗi vài giờ, tùy thuộc vào tính năng động của dữ liệu.Nếu dữ liệu trong thời gian thực, thì tôi đoán một số thuật toán khác sẽ mang lại sự cân bằng tốt hơn. Trong trường hợp này, yêu cầu tuyệt đối là thu hồi nhanh các kết quả cho mọi lần gõ phím mà nó thực hiện rất tốt.
Các biến chứng khác sẽ phát sinh nếu đề xuất sửa lỗi chính tả có liên quan. Trong trường hợp đó, các thuật toán chỉnh sửa khoảng cách cũng sẽ được xem xét.
Đối với các tập dữ liệu nhỏ như danh sách các quốc gia, việc triển khai Trie đơn giản sẽ thực hiện. Nếu bạn định triển khai một trình đơn thả xuống tự động hoàn chỉnh trong một ứng dụng web, tiện ích tự động hoàn thành của YUI3 sẽ làm mọi thứ cho bạn sau khi bạn cung cấp dữ liệu trong danh sách. Nếu bạn sử dụng YUI3 chỉ là giao diện người dùng cho tự động hoàn tất được hỗ trợ bởi dữ liệu lớn, hãy tạo các dịch vụ web dựa trên TST bằng C++ và sau đó sử dụng nguồn dữ liệu nút tập lệnh của tiện ích tự động điền để tìm nạp dữ liệu từ dịch vụ web thay vì danh sách đơn giản.
Nguồn
2009-11-23 19:17:01
Hơi liên quan là mô tả Peter Norvig của Google Làm thế nào để sửa lỗi chính tả: http://norvig.com/spell-correct.html –
Một Trie tiêu chuẩn là bộ nhớ rất chuyên sâu, đối với các bộ lớn hơn, bạn muốn sử dụng một Trie nhỏ gọn giúp giảm đáng kể dung lượng bộ nhớ. Các tối ưu hóa bổ sung bao gồm việc khởi tạo lười biếng các giá trị nút và cấu trúc dữ liệu phù hợp cho các tập con/giá trị. Cách đây không lâu, tôi đã tạo [thư viện tự động hoàn chỉnh] (https://github.com/fmmfonseca/completely) có khả năng xử lý các tập dữ liệu rất lớn (10.000.000+) và trả lời hiệu quả các tìm kiếm chính xác và gần đúng. –