0Pricing
Coding Interview Prep · Урок

Полиномиальное хеширование строк

Сравнивайте подстроки за константное время

«Полиномиальное хеширование строк» — бесплатный урок Coding Interview Prep на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Coding Interview Prep, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Coding Interview Prep содержит 4 уроков всего.

Быстрое сравнение подстрок

Часто требуется проверить, равны ли две подстроки. Посимвольное сравнение медленно, поэтому мы превращаем каждую строку в число. 🔢

Идея хеширования

Хеш отображает строку в одно целое число. Если строки различаются, их хеши почти всегда тоже различаются.

Рассматривайте строки как многочлены

Мы воспринимаем каждый символ как цифру в системе с основанием p. Такой многочленный взгляд превращает строку в одну большую взвешенную сумму.

h = ord(s[0]) + ord(s[1]) * p + ord(s[2]) * p * p

Выберите основание и модуль

Выберите простое основание, например 31, и большое простое число в качестве модуля. Взятие по модулю сохраняет числа небольшими и предотвращает переполнение.

BASE = 31
MOD = 10**9 + 9

Вычисление одного хеша

Пройдите по строке и добавляйте каждый символ по схеме Горнера, выполняя взятие по модулю на каждом шаге.

h = 0
for c in s:
    h = (h * BASE + ord(c)) % MOD

Префиксные хеши

Сохраните хеш префикса для каждой позиции. Тогда хеш любой подстроки можно получить быстрым вычитанием.

pre[i + 1] = (pre[i] * BASE + ord(s[i])) % MOD

Степени основания

Также предварительно вычислите степени основания. Они выравнивают два префикса при вычитании.

pw[i] = (pw[i - 1] * BASE) % MOD

Хеш подстроки за O(1)

Хеш s[l..r] получают вычитанием двух префиксных хешей с поправкой на степень основания. Постоянное время на каждый запрос.

def sub(l, r):
    return (pre[r] - pre[l] * pw[r - l]) % MOD

Остерегайтесь коллизий

Две разные строки могут иметь один и тот же хеш — это коллизия. Такое случается редко, но на соревнованиях иногда специально подбирают входные данные, чтобы её вызвать.

Двойное хеширование для надёжности

Используйте два независимых модуля и сравнивайте оба хеша. Одновременная коллизия по обоим модулям практически невозможна.

Где хеширование особенно полезно

Хеширование позволяет эффективно сравнивать подстроки, находить повторы и искать шаблоны. Это универсальный инструмент.

Быстрая проверка

Выберите подходящий инструмент для безопасного сравнения множества подстрок.

Итоги: преимущества хеширования

Теперь Вы умеете превращать строки в полиномиальные хеши, получать хеш любой подстроки за O(1) и защищаться от коллизий. 🚀

Часто задаваемые вопросы

Урок «Полиномиальное хеширование строк» бесплатный?

Да — полный текст урока «Полиномиальное хеширование строк» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Coding Interview Prep, подпишись на CoddyKit PRO. Курс Coding Interview Prep содержит 4 уроков всего.

Чему я научусь в уроке «Полиномиальное хеширование строк»?

Сравнивайте подстроки за константное время Ты практикуешь Coding Interview Prep с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Coding Interview Prep?

Предыдущий опыт не требуется. Coding Interview Prep на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Полиномиальное хеширование строк»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Coding Interview Prep?

Да. Каждый урок Coding Interview Prep включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Префиксная функция KMP
  2. Полиномиальное хеширование строк
  3. Z-функция для поиска шаблона
  4. Деревья поиска по префиксам
← Назад к Coding Interview Prep