2026-rff_mp/skorohodovsa/task_1/README.md
2026-05-25 11:27:50 +03:00

76 lines
4.9 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. Реализованы структуры данных
- **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**. Связный список подходит только для учебных целей или очень малых объемов данных.