catpad: (Default)
[personal profile] catpad

Задача пришла из жизни. Это не просто упражнение, а совершенно реальная задача, которую мне необходимо решить на работе. Я её решил, но, может быть, кто-то придумает лучше.


Дано множество строк, например:

voda
eric
nec

и так далее - размер множества любой.
На входе алгоритм получает произвольную строку, например: "vodafone.com".
Как наиболее быстрым способом определить, что эта строка содержит в качестве подстроки (substring) одну из данного множества ?
(В приведённом примере ответ положительный, потому что "voda" - это подстрока "vodafone.com").

Задача простая, но ключевые слова здесь, конечно - "наиболее быстро".
Я придумал как это сделать почти за линейное время. "Почти" в смысле, что я не очень хорошо помню, что такое "amortized complexity", но, кажется, получается как раз O(n).
Завтра опубликую ответ, но хотелось бы посмотреть на разные предложения.

Date: 2005-12-01 07:04 am (UTC)
From: [identity profile] motya.livejournal.com
Дополнение: ключ хэша - буквы (первая, затем, если слишком много на какой-нибудь букве сидит, то там сабхэш по второй букве и т.д.).
Понятно, что одна и та же строка может быть в списке кандидатов несколько раз с разным "проверено до ... буквы".
Page generated Feb. 6th, 2026 10:40 pm
Powered by Dreamwidth Studios