Общий «алгоритм», предполагающий неограниченное хранилище, для его оптимизации состоит в том, чтобы построить дерево на основе символов, позволяющее вам рекурсивно искать свой шаблон. При построении древовидного индекса вы перемещаетесь вниз, пока не достигнете «уникальной» точки, а «лист» даст местоположение, где находится это уникальное вхождение.
В приведенном выше абзаце, например, слово «индекс» встречается один раз. Если дерево строится по одному символу за раз, тогда путь дерева, по которому мы идем, начинается с символа «i», а затем «in». Если он чувствителен к регистру, есть только 3 случая (предположения, оптимизация и индексирование). Когда мы в следующий раз ищем «d», мы получаем наш уникальный результат. Конечно, мы могли бы начать наш поиск сначала с пробела, затем с i, а затем с n, и мы бы пошли другим путем.
Вы также можете сделать дерево нечувствительным к регистру и использовать «nybble», а не байт в каждой точке ветвления.