# ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ

## Тема: Сравнительный анализ структур данных для телефонной книги

### Цель работы
Реализовать и сравнить производительность трех структур данных: бинарного дерева поиска, хеш-таблицы и связного списка.

### Ход работы

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