Appearance
Хэши
1. Основные понятия и определения
- Хэш-функция — это функция, сопоставляющая объектам из некоторого множества числовые значения из ограниченного промежутка.
Глобальные области применения:
Криптография
Кэширование
Хранение паролей
Применение в алгоритмических задачах:
Подсчёт количества различных подстрок
Поиск подстроки в строке
Проверка подстроки на палиндромность
2. Полиномиальное хэширование
Пусть задана строка
Виды полиномиального хэша:
- Прямой полиномиальный хэш строки:
- Обратный полиномиальный хэш строки:
3. Сравнение подстрок за
Для эффективного вычисления и сравнения хэшей подстрок используется следующий алгоритм:
Массив степеней основания (баз): Предварительно вычисляются и сохраняются степени основания
. Массив префиксных хэшей: Строится массив
, где — это хэш префикса строки от начала до символа включительно. Вычисление хэша произвольной подстроки
: Хэш подстроки определяется с использованием значения префиксного хэша предыдущей части строки, умноженного на соответствующую степень основания , за время .
4. Решение типовых задач с помощью хэшей
1. Поиск подстроки в строке
Подход: Алгоритм скользящего окна (проход окном по всей строке).
Временная сложность:
.
2. Количество различных подстрок
Подход: Вычисляются хэши для всех возможных подстрок строки и помещаются в структуру данных
set(множество).Ответ: Размер множества
set.size().
3. Проверка подстроки на палиндромность
- Подход: Сравнивается значение прямого хэша подстроки со значением её обратного хэша. Если хэши совпадают, подстрока с высокой вероятностью является палиндромом.