БЕСПЛАТНАЯ ПОДГОТОВКА К ЕГЭ ПО ПРОФИЛЬНОЙ МАТЕМАТИКЕ
Подготовься к ЕГЭ-2026 по профильной математике самостоятельно с помощью сервиса "1С:Репетитор"!
Понятная теория и эффективные тренажеры с объяснением! Вы успеете подготовиться к экзамену! Начните занятия прямо сейчас!
design_arrow

Алгоритм Рабина-Карпа

Поиск подстроки в строке – одна из классических задач алгоритмики, имеющая важное значение в программировании, текстовой обработке, биоинформатике, криптографии и других областях. В школьном курсе информатики она встречается в задачах, связанных с обработкой строк, анализом последовательностей символов и поиском закономерностей. Алгоритм Рабина–Карпа является одним из наиболее известных методов поиска подстроки, основанным на использовании хэш-функций и метода «скользящего окна».

В контексте подготовки к ЕГЭ по информатике знание этого алгоритма позволяет учащимся глубже понять принципы работы со строками, закрепить понимание понятий алгоритмической сложности, хэширования, алгоритмических оптимизаций, а также развить навыки решения задач с использованием современных методов обработки данных.

Теоретические основы алгоритма Рабина–Карпа

Суть метода

Алгоритм Рабина–Карпа решает задачу: найти все вхождения строки P (шаблона) длиной m в строку T (текст) длиной n, где n≥m.

Основная идея:

  1. Для каждой подстроки текста длины mmm вычисляется хэш-значение.

  2. Для шаблона P также вычисляется хэш.

  3. Если хэши совпадают, то выполняется дополнительная проверка (сравнение символов).

  4. Сдвигая «окно» по строке, мы быстро пересчитываем хэш благодаря рекуррентным формулам.

Формализация алгоритма

Формализация алгоритма

Алгоритмическая сложность

  • В среднем: O (n+m) – благодаря эффективному пересчёту хэшей.

  • В худшем случае: O (n⋅m), если часто случаются коллизии (разные строки имеют одинаковый хэш).

Правила применения алгоритма Рабина–Карпа

  • Выбор модуля p: следует использовать достаточно большое простое число, чтобы минимизировать вероятность коллизий.

  • Выбор основания q: обычно выбирается число, большее размера алфавита (например, для латинских букв q=31 или q=53).

  • Обработка коллизий: совпадение хэшей не гарантирует равенства строк – нужна дополнительная проверка символов.

  • Оптимизация: при решении школьных задач можно использовать простое целочисленное хэширование без модуля, если строка короткая и вероятность переполнения мала.

  • Корректность: алгоритм всегда должен выдавать точный результат при наличии проверки совпадений символов.

 Информатика–схема алгоритма Рабина-Карпа

Практические аспекты для ЕГЭ по информатике

В ЕГЭ часто встречаются задачи на:

  • подсчёт числа вхождений подстроки в строку;

  • поиск первой позиции подстроки;

  • определение свойств строки (например, палиндромичность, повторяемость фрагментов).

Хотя алгоритм Рабина–Карпа прямо не включён в обязательную программу, его идеи можно использовать при решении сложных задач. Например, для строк длиной в десятки тысяч символов использование прямого сравнения всех подстрок становится неэффективным, а метод хэширования даёт возможность ускорить поиск.

Упражнения для закрепления

Упражнение 1.
Реализуйте алгоритм Рабина–Карпа для поиска всех вхождений подстроки «aba» в строку «abacabaaba». Выпишите промежуточные хэши каждого окна.

Упражнение 2.
Дана строка длиной n=105. Сравните время работы двух методов: полного перебора и Рабина–Карпа. Подсчитайте, сколько операций символ-символ требуется в худшем и среднем случае.

Упражнение 3.
Напишите программу, которая проверяет, является ли строка T повторением некоторого шаблона PP, используя алгоритм Рабина–Карпа (например, строка «abcabcabc» является повторением «abc»).

Упражнение 4.
Рассмотрите задачу: найти первую позицию подстроки в строке. Реализуйте два варианта:

  • наивный алгоритм;

  • алгоритм Рабина–Карпа.

Сравните шаги работы на примере: T=«mississippi», P=«issi».

Упражнение 5.
Для строки длиной 20 символов постройте таблицу хэш-значений всех подстрок длины 5. Сравните число коллизий при использовании модуля p=101 и при использовании большого простого числа p=109+7. Сделайте вывод о важности выбора параметров алгоритма.

Заключение

Алгоритм Рабина–Карпа – пример удачного применения математических идей (хэширования, модульной арифметики) в информатике. Его использование демонстрирует учащимся, что даже классическая задача поиска подстроки может быть решена разными способами: наивным и оптимизированным.

Для подготовки к ЕГЭ понимание данного метода не только расширяет кругозор, но и позволяет формировать устойчивые навыки анализа алгоритмов, оценки их сложности, работы с понятием коллизий и обработки больших объёмов данных. А выполненные упражнения развивают практические умения программирования, необходимые как для экзамена, так и для будущей профессиональной деятельности.