Я недавно столкнулся с этой проблемой и просто хочу поделиться своими мыслями.
«Эффективное использование памяти», как я понял, это возможность поиска длинной строки размера M с учетом только N объема доступной памяти, M> N. Это альтернатива эффективному использованию памяти на символ, доступный в строке для поиск. И я чувствую, что может быть более уместным для встроенной среды оригинального плаката (которая может иметь большой объем памяти).
Независимо от того, какой алгоритм вы используете для сравнения (чем эффективнее, тем лучше), я бы предпочел использовать циклический буфер (который должен быть больше строки, которую вы ищете, возможно, по крайней мере, в 2 раза? ) и непрерывно загружать поток символов в буфер, пока продвигается алгоритм поиска. Алгоритм поиска должен знать, как обернуть круговой буфер (или добавить уровень косвенности, чтобы скрыть круговой буфер от алгоритма поиска).