forked from UNN/2026-rff_mp
96 lines
2.6 KiB
Markdown
96 lines
2.6 KiB
Markdown
|
|
# Отчёт по заданию 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()
|
|||
|
|
|
|||
|
|
|