forked from UNN/2026-rff_mp
76 lines
4.9 KiB
Markdown
76 lines
4.9 KiB
Markdown
# ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ
|
||
|
||
## Тема: Сравнительный анализ структур данных для телефонной книги
|
||
|
||
### Цель работы
|
||
Реализовать и сравнить производительность трех структур данных: бинарного дерева поиска, хеш-таблицы и связного списка.
|
||
|
||
### Ход работы
|
||
|
||
#### 1. Реализованы структуры данных
|
||
- **Binary Search Tree (BST)** - бинарное дерево поиска
|
||
- **Hash Table** - хеш-таблица с методом цепочек
|
||
- **Linked List** - односвязный список
|
||
|
||
#### 2. Проведены эксперименты
|
||
|
||
Каждый эксперимент повторен 5 раз, результаты сохранены в файл `results.csv`
|
||
|
||
**Эксперимент 1:** Вставка элементов (случайные данные)
|
||
**Эксперимент 2:** Вставка элементов (отсортированные данные)
|
||
**Эксперимент 3:** Поиск 100 элементов
|
||
|
||
### Результаты измерений (средние значения)
|
||
|
||
| Размер | BST случайный | BST отсортированный | Хеш-таблица | Связный список |
|
||
|--------|---------------|--------------------|-------------|----------------|
|
||
| 100 | 0.0001 сек | 0.0004 сек | 0.0002 сек | 0.0005 сек |
|
||
| 200 | 0.0002 сек | 0.0023 сек | 0.0006 сек | 0.0020 сек |
|
||
| 500 | 0.0007 сек | 0.0259 сек | 0.0100 сек | 0.0123 сек |
|
||
| 1000 | 0.0034 сек | 0.0910 сек | 0.0250 сек | 0.0340 сек |
|
||
| 2000 | 0.0075 сек | 0.3500 сек | 0.0580 сек | 0.0820 сек |
|
||
|
||
**Поиск 100 элементов (2000 записей):**
|
||
- BST: 0.0012 сек
|
||
- Хеш-таблица: 0.00055 сек
|
||
- Связный список: 0.0032 сек
|
||
|
||
### Графики
|
||
|
||
*(вставьте сюда graphics.png)*
|
||
|
||
**График 1:** Сравнение скорости вставки
|
||
**График 2:** Деградация BST на отсортированных данных
|
||
**График 3:** Сравнение скорости поиска
|
||
**График 4:** Во сколько раз BST медленнее на отсортированных данных
|
||
|
||
### Анализ результатов
|
||
|
||
**1. Влияние порядка данных на BST**
|
||
При вставке отсортированных данных BST вырождается в связный список. На 2000 записях замедление составило 46.7 раз. Сложность падает с O(log n) до O(n).
|
||
|
||
**2. Хеш-таблица и порядок данных**
|
||
Хеш-таблица не чувствительна к порядку, так как хеш-функция вычисляет позицию напрямую, без сравнения с другими элементами.
|
||
|
||
**3. Связный список при поиске**
|
||
Всегда медленен при поиске, так как требует последовательного перебора O(n) до нахождения элемента.
|
||
|
||
**4. Удаление элементов**
|
||
- **BST:** требует поиска узла и перестроения поддеревьев (сложный случай с двумя детьми)
|
||
- **Хеш-таблица:** помечает элемент как deleted, при переполнении делает рехеширование
|
||
- **Связный список:** перелинковывает указатели предыдущего и следующего узлов
|
||
|
||
### Вывод
|
||
|
||
**Рекомендации по выбору структуры данных:**
|
||
|
||
| Задача | Рекомендуемая структура | Причина |
|
||
|--------|------------------------|---------|
|
||
| Частый поиск | Хеш-таблица | O(1) в среднем |
|
||
| Частые вставки | Хеш-таблица | O(1) в среднем |
|
||
| Нужна сортировка | BST | автоматическая сортировка |
|
||
| Мало данных (<100) | Связный список | простая реализация |
|
||
| Максимальная скорость | Хеш-таблица | лучшая производительность |
|
||
|
||
**Итог:** Для телефонной книги с большим количеством записей и частым поиском оптимальна **хеш-таблица**. Если требуется выводить контакты в алфавитном порядке - **BST**. Связный список подходит только для учебных целей или очень малых объемов данных.
|