# Отчёт по заданию 1 ## Структуры данных: LinkedList, HashTable, BST ### Ветка: `Task1(vinichukan)` --- # 1. Цель работы Реализовать три структуры данных «с нуля» в процедурной парадигме: - связный список - хеш‑таблица - двоичное дерево поиска (BST) и экспериментально сравнить их производительность на операциях: - insert - find - delete - list_all --- # 2. Реализованные структуры данных Код расположен в папке `src/`: - `linked_list.py` - `hash_table.py` - `bst.py` - `benchmark.py` Все структуры реализованы вручную, без использования классов. --- # 3. Методика эксперимента ### 3.1. Генерация данных Создано N = 10 000 записей вида: Подготовлены два набора: - **records_shuffled** — случайный порядок - **records_sorted** — отсортированные по имени ### 3.2. Замеры времени Использовался `time.perf_counter()`. Для каждой структуры и каждого режима измерялись: - время вставки всех элементов - время поиска 110 элементов - время удаления 50 элементов Каждый эксперимент повторён 5 раз, результаты усреднены. --- # 4. Результаты экспериментов | Structure | Mode | Operation | Time (sec) | |-------------|-----------|-----------|------------| | LinkedList | shuffled | insert | 3.3624 | | HashTable | shuffled | insert | 0.2036 | | BST | shuffled | insert | 0.0205 | | LinkedList | sorted | insert | 2.8639 | | HashTable | sorted | insert | 0.1816 | | BST | sorted | insert | 5.2378 | --- # 5. График сравнения ```python import matplotlib.pyplot as plt structures = ["LinkedList", "HashTable", "BST"] shuffled = [3.3624, 0.2036, 0.0205] sorted_data = [2.8639, 0.1816, 5.2378] plt.figure(figsize=(10,6)) plt.bar([s + " (shuffled)" for s in structures], shuffled, label="shuffled") plt.bar([s + " (sorted)" for s in structures], sorted_data, label="sorted") plt.ylabel("Time (seconds)") plt.title("Insert Performance Comparison") plt.xticks(rotation=45) plt.legend() plt.tight_layout() plt.show()