Давайте просто сделаем простые вычисления:
Предположим, что у вас есть 1 миллион шаблонов (строк, фраз) со средней длиной 10 символов и значением (метка, маркер, указатель и т. Д.) Длиной 1 слово (4 байта), назначенным каждому шаблону
Тогда вам понадобится массив размером 10 + 4 = 14 миллионов байт (14 МБ), чтобы хранить список шаблонов.
Из 1 миллиона шаблонов по 10 байтов (букв, символов) вы можете создать три AC-цепочки, содержащие не более 10 миллионов узлов. Насколько большой это дерево на практике зависит от размера каждого узла.
В нем должно быть не менее 1 байта для метки (буквы) и слова (4 байта) для указателя на следующий узел в три (или шаблона для терминального узла) плюс 1 бит (логическое значение) для маркировки терминального узла,
Всего около 5 байт
Итак, для минимального размера дерева для 1 миллиона шаблонов на 10 символов вам потребуется минимум 50 миллионов байтов или около 50 МБ памяти.
На практике это может быть в 3-10 раз больше, но все же очень-очень управляемо, так как даже память 500 МБ сегодня очень умеренная. (Сравните это с приложениями Windows, такими как Word или Outlook)
Учитывая, что с точки зрения скорости алгоритм Aho-Corasick (AC) практически непобедим, он все еще остается лучшим алгоритмом для сопоставления с несколькими образцами. Это мое сильное личное образованное мнение, кроме академического мусора.
Все сообщения о "новых" новейших и лучших алгоритмах, которые могут превосходить AC, сильно преувеличены (за исключением, может быть, некоторых особых случаев с короткими паттернами, такими как ДНК)
Единственное улучшение AC может на практике идти по линии более мощного оборудования (многоядерные, более быстрые процессоры, кластеры и т. Д.)
Не верь мне на слово, проверь это на себе. Но помните, что реальная скорость AC сильно зависит от реализации (язык и качество кодирования)