2026-rff_mp/pogodinda/lab1/docs/report.md

51 lines
5.2 KiB
Markdown
Raw Normal View History

2026-05-21 17:29:55 +00:00
# Отчёт по лабораторной работе "Структуры данных"
## 1. Введение
В данной работе были реализованы три структуры данных для хранения телефонного справочника: связный список, хеш-таблица и двоичное дерево поиска. Проведено экспериментальное сравнение производительности операций вставки, поиска и удаления на наборе из **10 000 записей**.
Для каждой структуры тестирование выполнялось на двух вариантах входных данных: случайный порядок и отсортированный по имени. Каждый эксперимент повторялся **5 раз**, в таблице приведены средние значения.
2026-05-21 17:29:55 +00:00
## 2. Результаты измерений
| Структура | Режим | Вставка, с | Поиск, с | Удаление, с |
|-----------|-------|------------|----------|-------------|
| Связный список | случайный | 4.84 | 0.0544 | 0.0308 |
| Связный список | отсортированный | 4.60 | 0.0446 | 0.0199 |
| Хеш-таблица | случайный | 0.0218 | 0.000196 | 0.000096 |
| Хеш-таблица | отсортированный | 0.0204 | 0.000212 | 0.000098 |
| Двоичное дерево | случайный | 0.0507 | 0.000280 | 0.000175 |
| Двоичное дерево | отсортированный | 17.99 | 0.1583 | 0.0720 |
2026-05-21 17:29:55 +00:00
![График производительности](data/graph.png)
## 3. Анализ результатов
### 3.1. Влияние порядка данных на BST
При вставке элементов в отсортированном порядке двоичное дерево поиска вырождается в линейный список. Эксперимент подтверждает это: вставка на отсортированных данных заняла **17.99 секунды**, что в **355 раз** медленнее, чем на случайных данных (0.0507 секунды). Поиск и удаление также замедлились примерно в 500 раз.
2026-05-21 17:29:55 +00:00
### 3.2. Устойчивость хеш-таблицы к порядку
Хеш-таблица использует хеш-функцию, которая равномерно распределяет ключи по корзинам независимо от порядка поступления. В случайном и отсортированном режимах время вставки практически одинаково: 0.0218 и 0.0204 секунды. Разница находится в пределах погрешности измерений.
2026-05-21 17:29:55 +00:00
### 3.3. Медлительность связного списка
2026-05-21 17:29:55 +00:00
Связный список не обеспечивает прямого доступа к элементам. Вставка 10000 записей заняла **4.84 секунды** в случайном режиме. Время поиска в списке (0.0544 сек) в **278 раз** больше, чем в хеш-таблице (0.000196 сек). Удаление также значительно медленнее.
2026-05-21 17:29:55 +00:00
### 3.4. Сравнение удаления
- **Связный список**: 0.0308 сек (случайный) — требуется линейный поиск
- **Хеш-таблица**: 0.000096 сек — практически мгновенно
- **BST на случайных данных**: 0.000175 сек — очень быстро
- **BST на отсортированных данных**: 0.0720 сек — в 400 раз медленнее, чем на случайных
2026-05-21 17:29:55 +00:00
## 4. Выводы
2026-05-21 17:29:55 +00:00
**Хеш-таблица** оптимальный выбор, если требуется максимальная скорость поиска, вставки и удаления. В эксперименте показала стабильно высокую производительность во всех режимах (около 0.02 секунды на вставку 10000 записей).
2026-05-21 17:29:55 +00:00
**Двоичное дерево поиска** эффективно на случайных данных, но критически деградирует на отсортированных. При необходимости работы с отсортированными данными следует использовать сбалансированные деревья (AVL, красно-чёрные).
2026-05-21 17:29:55 +00:00
**Связный список** практически непригоден для больших объёмов данных из-за линейной сложности (4.84 секунды на вставку 10000 записей).
2026-05-21 17:29:55 +00:00
**Для телефонного справочника рекомендуется использовать хеш-таблицу** как наиболее быстрое и предсказуемое решение.