2026-rff_mp/vinichukan/docs/report_task1.md

96 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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