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()
|
||
|
||
|