Skip to content

Хэши

1. Основные понятия и определения

  • Хэш-функция — это функция, сопоставляющая объектам из некоторого множества числовые значения из ограниченного промежутка.

Глобальные области применения:

  • Криптография

  • Кэширование

  • Хранение паролей

Применение в алгоритмических задачах:

  • Подсчёт количества различных подстрок

  • Поиск подстроки в строке

  • Проверка подстроки на палиндромность


2. Полиномиальное хэширование

Пусть задана строка S, символы которой сопоставляются числам от 1 до m. Выбирается модуль p (например, p=109+7) и основание (база) k>m.

Виды полиномиального хэша:

  1. Прямой полиномиальный хэш строки:
hf=(s0+s1k+s2k2++snkn)(modp)
  1. Обратный полиномиальный хэш строки:
hb=(s0kn+s1kn1++sn)(modp)

3. Сравнение подстрок за O(1)

Для эффективного вычисления и сравнения хэшей подстрок используется следующий алгоритм:

  1. Массив степеней основания (баз): Предварительно вычисляются и сохраняются степени основания k0,k1,k2,(modp).

  2. Массив префиксных хэшей: Строится массив p, где pi — это хэш префикса строки от начала до символа si включительно.

  3. Вычисление хэша произвольной подстроки [i,j]: Хэш подстроки определяется с использованием значения префиксного хэша предыдущей части строки, умноженного на соответствующую степень основания k, за время O(1).

4. Решение типовых задач с помощью хэшей

1. Поиск подстроки в строке

  • Подход: Алгоритм скользящего окна (проход окном по всей строке).

  • Временная сложность: O(n).

2. Количество различных подстрок

  • Подход: Вычисляются хэши для всех возможных подстрок строки и помещаются в структуру данных set (множество).

  • Ответ: Размер множества set.size().

3. Проверка подстроки на палиндромность

  • Подход: Сравнивается значение прямого хэша подстроки со значением её обратного хэша. Если хэши совпадают, подстрока с высокой вероятностью является палиндромом.