docs: add final report with analysis
This commit is contained in:
parent
9b3a09740d
commit
906250c019
103
docs/report.md
Normal file
103
docs/report.md
Normal file
|
|
@ -0,0 +1,103 @@
|
||||||
|
# Отчет по лабораторной работе: Сравнение структур данных для телефонного справочника
|
||||||
|
|
||||||
|
## 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. Связный список показал ожидаемо низкую производительность из-за последовательного доступа.
|
||||||
Loading…
Reference in New Issue
Block a user