Tôi có tình huống sau: Tôi có một bộ sưu tập lớn các chuỗi (cho phép 250.000+) chiều dài trung bình có thể là 30. Những gì tôi phải làm là để làm nhiều tìm kiếm trong số này .. chủ yếu là những người sẽ được của StartsWith và Chứa loại.cấu trúc/thuật toán thu thập chuỗi nhanh nhất để bắt đầu và/hoặc chứa tìm kiếm
Bộ sưu tập là tĩnh khi chạy. Có nghĩa là việc đọc và điền ban đầu của bộ sưu tập lựa chọn chỉ được thực hiện một lần .. do đó hiệu suất của việc xây dựng cơ sở hạ tầng là hoàn toàn không quan trọng. Bộ nhớ cũng không phải là một vấn đề: điều này cũng có nghĩa là tôi không nhớ có hai bộ sưu tập với cùng một dữ liệu trong mỗi bộ nếu cần thiết (như một bộ cho phần bắt đầu và một cho chứa). Chỉ có điều quan trọng là hiệu suất của các tìm kiếm sẽ trả về tất cả các yếu tố phù hợp với điều kiện tìm kiếm.
Để bắt đầu, tôi đã đến Trie hoặc cây Radix .. nhưng có lẽ thậm chí còn có sự lựa chọn tốt hơn?
Đối với chứa .. Tôi không có ý tưởng nào cả (bên cạnh việc chạy truy vấn LINQ trên danh sách sẽ không quá nhanh với lượng dữ liệu đó).
Cảm ơn mọi người trước!
update: Tôi quên một phần quan trọng: với Chứa đựng tôi có nghĩa là không có kết hợp chính xác trong bộ sưu tập .. nhưng tôi muốn tìm tất cả các chuỗi trong bộ sưu tập có chứa searchstring cho
Chuỗi con cho chuỗi Chứa giao dịch tìm kiếm có từ hoặc các ký tự riêng lẻ? Tôi tự hỏi nếu xây dựng một chỉ số sẽ có ý nghĩa cho một trong đó. –
Nó phải hỗ trợ các ký tự. Mặc dù vì lý do hiệu suất tôi có thể tưởng tượng để cung cấp cho một chiều dài tối thiểu là 3 hoặc nhiều ký tự trước khi tìm kiếm. (có thể nghĩ về nó giống như tự động điền trong một hộp văn bản chỉ khởi động sau khi một số ký tự được nhập) – Mikk
Tìm kiếm trên web cho "Rabin Karp". Điều này sẽ giúp bạn bắt đầu vì nó có một số thuật toán tìm kiếm được liên kết ... http: //www.stoimen.com/blog/2012/04/02/máy tính-thuật toán-rabin-karp-string-tìm kiếm/Cũng nghĩ về việc sử dụng một bộ lọc nở và tải trước nó với các chuỗi của bạn lúc khởi động. – JimR