У меня есть следующая ситуация: У меня есть большая коллекция строк (скажем, 250.000+) средней длины, возможно, 30. Что мне нужно сделайте много попыток в пределах этих .. в основном это будут StartsWith и Содержит вид.Какова самая быстрая структура или структура строк для запуска и/или содержит поисковые запросы
Коллекция является статической во время выполнения. Это означает, что первоначальное чтение и заполнение коллекции выбора выполняется только один раз. Поэтому выполнение построения структуры данных абсолютно не важно. Память также не является проблемой: это также означает, что я не против иметь две коллекции с одинаковыми данными в каждом случае, если это необходимо (например, один для startswith и другой для содержит). Единственное, что имеет значение, это выполнение поисков, которые должны возвращать все элементы, которые соответствуют условию поиска.
Для начала я столкнулся с деревом Trie или Radix .. но, возможно, есть еще лучшие варианты?
Для содержит. У меня пока нет хорошей идеи (помимо запуска запроса linq в списке, который не будет очень быстрым с этим объемом данных).
Заранее благодарен всем!
обновления: Я забыл важную роль: с Содержит я не имею в виду никаких точных совпадений в коллекции .. но я хочу, чтобы найти все строки в коллекции, которые содержат данное SearchString
Будет ли подстрока для поиска Содержит поиск со словами или отдельными символами? Интересно, будет ли построение индекса иметь смысл для этого. –
Он должен поддерживать персонажей. Несмотря на то, что по соображениям производительности я мог вообразить, чтобы перед поиском дать минимум 3 или более символов. (можно считать его автозаполнением в текстовом поле, которое начинается только после ввода некоторых символов) – Mikk
Поиск в Интернете для «Rabin Karp». Это должно заставить вас начать, поскольку у него есть несколько алгоритмов поиска, связанных ... http: //www.stoimen.com/blog/2012/04/02/computer-algorithmms-rabin-karp-string-search/Также подумайте об использовании фильтра цветка и предварительно загрузите его своими строками при запуске. – JimR