1. Главная
  2. Библиотека
  3. Информационные технологии
  4. Рассмотрим хеш-таблицу, имеющую 200 ячеек. Ключами в эт...
Разбор задачи

Рассмотрим хеш-таблицу, имеющую 200 ячеек. Ключами в этой хеш-таблице являются строки. Для определения того, в какой ячейке следует искать заданную строку, используется следующая хеш-функция: get_hash(string): result = 0 for char in string: result =

  • Предмет: Информационные технологии
  • Автор: Кэмп
  • #Алгоритмы и структуры данных
  • #Языки программирования
Рассмотрим хеш-таблицу, имеющую 200 ячеек. Ключами в этой хеш-таблице являются строки. Для определения того, в какой ячейке следует искать заданную строку, используется следующая хеш-функция: get_hash(string): result = 0 for char in string: result =

Условие:

Рассмотрим хеш-таблицу, имеющую 200 ячеек.

Ключами в этой хеш-таблице являются строки. Для определения того, в какой ячейке следует искать заданную строку, используется следующая хеш-функция:
\ndef get_hash(string):

result = 0

for char in string:

result = (result * x + ord(char)) % 200

return result

Значение x вам не известно, но вы знаете, что это некоторое целое число от 2 до 199.

Попробуйте взломать эту хеш-функцию: составьте N строк, которые попарно различны, но функция get_hash возвращает для каждой из них одно и то же значение (при этом x может быть любым числом от 2 до 199, но для всех строк оно будет одинаковым).
Формат ввода

Ввод содержит целое число N ( 1≤N≤200).
Формат вывода

Выведите N различных строк, состоящих из строчных латинских букв. Длина каждой строки не должна превышать 5000 символов.

Значения хеш-функции от всех выведенных строк должны быть одинаковыми.
Пример
Ввод
Вывод

1

\ttest

Решение:

Для решения задачи нам нужно создать NN различных строк, которые будут давать одинаковый хеш по заданной хеш-функции. Мы можем использовать свойства последовательности Тюэ-Морса, чтобы достичь этой цели.

Шаг 1: Понимание хеш-функции

Хеш-функция, заданная в условии, использует параметр xx, который может принимать значения от 2 до 199. Хеш-функция вычисляется следующим образом:

hash(s)=(((0x+ord(s0))x+ord(s1))x+ord(sk1))mod200 \text{hash}(s) = \left( \left( \ldots \left( 0 \cdot x + \text{ord}(s_0) \right) \cdot x + \text{ord}(s_1) \right) \cdots \cdot x + \text{ord}(s_{k-1}) \right) \mod 200

Внутри — полный разбор, аргументация, алгоритм решения, частые ошибки и как отвечать на каверзные вопросы препода, если спросит

Попробуй решить по шагам

Попробуй один шаг и продолжи в режиме обучения или посмотри готовое решение

Какой подход позволяет создать набор строк, дающих одинаковый хеш при использовании полиномиальной хеш-функции с неизвестным параметром `x`?

Что нужно знать по теме:

Что нужно знать по теме

Алгоритм решения

Топ 3 ошибок

Что спросит препод

Не нашел нужную задачу?

Воспользуйся поиском

Выбери предмет