forked from UNN/2026-rff_mp
2.6 KiB
2.6 KiB
Отчёт по заданию 1
Структуры данных: LinkedList, HashTable, BST
Ветка: Task1(vinichukan)
1. Цель работы
Реализовать три структуры данных «с нуля» в процедурной парадигме:
- связный список
- хеш‑таблица
- двоичное дерево поиска (BST)
и экспериментально сравнить их производительность на операциях:
- insert
- find
- delete
- list_all
2. Реализованные структуры данных
Код расположен в папке src/:
linked_list.pyhash_table.pybst.pybenchmark.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. График сравнения
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()