2026-rff_mp/vinichukan/docs/report_task1.md

96 lines
2.6 KiB
Markdown
Raw Normal View History

# Отчёт по заданию 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()