Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Stepik, курс "Алгоритмы: теория и практика. Структуры данных", модуль 3, задача 2
- # Задача: Создать хэш-таблицу с цепочками с использованием кастомной функции хэширования (полином)
- # Вход: Размер хэш-таблицы m, количество запросов n, далее запросы типа "add string", "del string", "find string", "check i"
- # Выход: Для запроса find вывести "yes" или "no", для запроса check -- вывести указанную строку хэш-таблицы
- from collections import deque
- # Параметры хэширования. Чтобы не перерасчитывать значения степеней X, будем кэшировать их в массиве
- m, p, X = int(input()), 1000000007, [1, 263]
- hash_table = [deque() for _ in range(m)]
- for _ in range(int(input())):
- command, arg = input().split()
- if command == "check":
- print(' '.join(hash_table[int(arg)]))
- else:
- # Собственно, расчёт степеней Х, если это необходимо
- for _ in range(len(arg) - len(X)):
- X.append((X[-1] * X[1]) % p)
- # Функция хэширования сводится к поэлементному суммированию произведений и взятию модулей
- chain = hash_table[sum(ord(c) * x for c, x in zip(arg, X)) % p % m]
- contains = arg in chain
- if command == "find":
- print("yes" if contains else "no")
- elif not contains and command == "add":
- chain.appendleft(arg)
- elif contains and command == "del":
- chain.remove(arg)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement