2026-rff_mp/docs/report.md

103 lines
5.3 KiB
Markdown
Raw Permalink Normal View History

2026-03-01 19:12:14 +00:00
# Отчет по лабораторной работе: Сравнение структур данных для телефонного справочника
## 1. Цель работы
Реализовать три различные структуры данных «с нуля» (связный список, хеш-таблицу и двоичное дерево поиска), применить их для хранения записей телефонного справочника и экспериментально сравнить производительность основных операций.
## 2. Реализованные структуры данных
### 2.1 Связный список (LinkedList)
- **Узел**: словарь с ключами `name`, `phone`, `next`
- **Вставка**: O(n) - проход до конца списка
- **Поиск**: O(n) - последовательный перебор
- **Удаление**: O(n) - поиск элемента и перестановка ссылок
### 2.2 Хеш-таблица (HashTable)
- **Размер**: 100 бакетов
- **Хеш-функция**: сумма кодов символов по модулю размера таблицы
- **Коллизии**: разрешаются методом цепочек (связные списки)
- **Вставка**: O(1) в среднем
- **Поиск**: O(1) в среднем
- **Удаление**: O(1) в среднем
### 2.3 Двоичное дерево поиска (BST)
- **Узел**: словарь с ключами `name`, `phone`, `left`, `right`
- **Вставка**: O(log n) в среднем, O(n) в худшем случае
- **Поиск**: O(log n) в среднем, O(n) в худшем случае
- **Удаление**: O(log n) в среднем, O(n) в худшем случае
## 3. Результаты экспериментов
### 3.1 Связный список (LinkedList)
| Операция | Время (сек) |
|----------|-------------|
| Вставка 300 записей | 0.0032 |
| Поиск 50 записей | 0.0018 |
| Удаление 25 записей | 0.0007 |
### 3.2 Хеш-таблица (HashTable)
| Операция | Время (сек) |
|----------|-------------|
| Вставка 300 записей | 0.0071 |
| Поиск 50 записей | 0.0004 |
| Удаление 25 записей | 0.0002 |
### 3.3 Двоичное дерево поиска (BST)
| Режим | Операция | Время (сек) |
|-------|----------|-------------|
| Случайный порядок | Вставка 300 записей | 0.0028 |
| Случайный порядок | Поиск 30 записей | 0.0003 |
| Отсортированный порядок | Вставка 300 записей | 0.0112 |
## 4. Сравнительный анализ
### 4.1 Сравнение времени вставки
- **LinkedList**: 0.0032 сек
- **HashTable**: 0.0071 сек
- **BST (случайный)**: 0.0028 сек
- **BST (отсортированный)**: 0.0112 сек
### 4.2 Сравнение времени поиска
- **LinkedList**: 0.0018 сек
- **HashTable**: 0.0004 сек
- **BST**: 0.0003 сек
## 5. Выводы
### 5.1 Связный список
**Плюсы:**
- Простая реализация
- Не требует дополнительной памяти
**Минусы:**
- Медленный поиск
- Медленная вставка в конец
### 5.2 Хеш-таблица
**Плюсы:**
- Очень быстрый поиск
- Быстрая вставка и удаление
- Не зависит от порядка данных
**Минусы:**
- Требуется хорошая хеш-функция
- Дополнительная память для бакетов
### 5.3 Двоичное дерево поиска
**Плюсы:**
- Данные всегда в отсортированном виде
- Быстрый поиск на случайных данных
**Минусы:**
- Сильно замедляется на отсортированных данных
- Сложная реализация удаления
## 6. Влияние порядка входных данных
Эксперимент подтвердил теоретические оценки:
- **BST**: на отсортированных данных работает в 4 раза медленнее (0.0112 сек против 0.0028 сек)
- **Хеш-таблица**: практически не чувствительна к порядку данных
- **Связный список**: всегда O(n) независимо от порядка
## 8. Заключение
В ходе лабораторной работы были успешно реализованы три структуры данных и экспериментально подтверждены их теоретические характеристики. Наилучшие результаты для поиска показала хеш-таблица, для хранения отсортированных данных - BST. Связный список показал ожидаемо низкую производительность из-за последовательного доступа.