Он достаточно быстр, если искомое слово влазит в машинное слово (простите за каламбур), работаем с маленьким алфавитом (ASCII, например) и имеем большой текст в котором нужно искать.
Не совсем понял вопроса. Например, на этой картинке:
если у нас есть только 8 столбец, то по нему мы можем определить, что на данном символе (8 в T) заканчивается совпадение первых 4 символов из P (т.к. в 4 строке стоит единица). То есть у нас совпали предыдущие 4 символа.
Ув. tltshnik, ссылки на источники информации в завершающей части статьи оформляйте аккуратнее. Сайт поисковой системы, на который Вы указываете, — слишком всеобъемлющий источник.
похоже на репост учебника по СиАОДу третьего курса. раз автор не удосужился, я накидаю ссылок: Виктор Дмитриевич Колдаев «Алгоритмы и структуры данных». я у него учился, да. алсо, автор забыл указать что для частных случаев функция сложности этого алгоритма квадратичная, поэтому его оценка сложности неверная. вычислять эти сдвиги побитово очень плохо, да и вообще есть гораздо более простой алгоритм, где просто так же передвигаем окно с шагом в 1 байт и добавляем к контрольной сумме байт, входящий в окно и вычитаем байт, покидающий окно и на каждом шаге просто сравнимаем контрольную сумму окна и образца.
кому интересно — в книжке выше есть так же алгоритм кнута-морриса-пратта и другие алгоритмы поиска с гарантированным временем O(n). правда насчёт редакции книжки подсказать не могу, но наверняка в последней всё есть
На самом деле, бо́льшую часть информации я брал из книги, которая стоит первой в ссылках. Но изложил тему, как мне кажется, в менее формализованном виде. А про учебник, о котором Вы сказали, я слышу в первый раз.
Описание работы алгоритма Shift-OR для поиска подстроки в строке