Поиск по дереву Trie / Suffix выполняется быстро, но создание Trie для начала значительно медленнее. Это означает, что они имеют смысл только тогда, когда вы ожидаете, что выполнит большое количество поисков по одним и тем же данным, поэтому вы можете амортизировать время для построения поиска по многим поискам.
Среднее количество запросов на веб-странице, вероятно, дробное (т. Е. Вы ожидаете, что пользователь загрузит несколько страниц, прежде чем выполнять поиск хотя бы один раз). Даже если вы выполняете поиск на странице, многие поисковые запросы на одной и той же странице, вероятно, довольно редки.
Это означает, что линейный поиск почти всегда будет существенно более эффективным в целом, чем дерево три или суффиксов. Я предполагаю, что, если они потрудятся оптимизировать его за пределы простого вызова strstr()
, они зайдут так далеко, как что-то в семействе строкового поиска Бойера-Мура. Учитывая количество поисковых запросов, которые вы ожидаете на веб-странице, это обычно завершит их все, прежде чем вы сможете просто выполнить первоначальную сборку дерева, поэтому вы можете начать поиск с ним.
Для интерактивного использования ваша главная задача - получать результаты достаточно быстро, чтобы они появлялись мгновенно. Как правило, это означает, что результаты в течение 100 мс или около того. При хорошей реализации Boyer-Moore-Horspool у вас будет достаточно времени для поиска объема текста, который будет безумным для включения в одну веб-страницу (порядка сотен мегабайт или гигабайт).
Если вы хотите проверить это, я бы порекомендовал Рею Гарднеру реализацию Бойера-Мура-Хорспула (Bmhsrch.C, с сайта Snippets Боба Стаута). Я действительно ненавижу , чтобы видеть веб-страницу достаточно большой, чтобы она оставалась занятой даже в течение 20 мс, не говоря уже о 100 (хотя я первый, кто признал, что эта конкретная реализация исключительно быстра).