2026-rff_mp/docs/report.md

103 lines
5.3 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. Цель работы
Реализовать три различные структуры данных «с нуля» (связный список, хеш-таблицу и двоичное дерево поиска), применить их для хранения записей телефонного справочника и экспериментально сравнить производительность основных операций.
## 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. Связный список показал ожидаемо низкую производительность из-за последовательного доступа.