Загрузка данных


import random

# Установка сида для генерации точно таких же чисел, как в примере
random.seed(42)

# 1. Генерация 49 семизначных неповторяющихся чисел
elements = set()
while len(elements) < 49:
    num = random.randint(1000000, 9999999)
    elements.add(num)
elements = list(elements)

print("--- СГЕНЕРИРОВАННЫЕ ЭЛЕМЕНТЫ (49 чисел) ---")
# Выводим по 10 чисел в строку для читаемости
for i in range(0, len(elements), 10):
    print(", ".join(map(str, elements[i:i+10])))
print("\n" + "="*50 + "\n")


# 2. Инициализация хеш-таблицы
t = 71  # Размер таблицы (ближайшее простое число > 49)
hash_table = [None] * t


# 3. Функция вставки с квадратичным опробованием
def insert_quadratic(table, size, key):
    # Формула исследования: h(k, i) = (k % t + i^2) % t
    base_hash = key % size
    for i in range(size):
        idx = (base_hash + i**2) % size
        if table[idx] is None:
            table[idx] = key
            return True
    return False  # Если таблица переполнена или цикл не нашел место


# Заполнение хеш-таблицы
for element in elements:
    insert_quadratic(hash_table, t, element)


# 4. Вывод хеш-таблицы на экран
print(f"--- ХЕШ-ТАБЛИЦА (Размер t = {t}) ---")
for index in range(t):
    value = hash_table[index]
    status = value if value is not None else "*пусто*"
    print(f"Индекс {index:2d}: {status}")