forked from UNN/2026-rff_mp
86 lines
5.5 KiB
Markdown
86 lines
5.5 KiB
Markdown
# Отчёт по лабораторной работе
|
||
|
||
## Цель работы
|
||
|
||
Реализовать три структуры данных «с нуля» (связный список, хеш-таблица, двоичное дерево поиска), применить их для хранения записей телефонного справочника и экспериментально сравнить производительность основных операций.
|
||
|
||
## Параметры эксперимента
|
||
|
||
- Количество записей: 10000
|
||
- Количество повторов каждого теста: 5
|
||
- Размер хеш-таблицы: 1000 корзин
|
||
|
||
## Результаты экспериментов
|
||
|
||
### 1. Связный список
|
||
|
||
| Режим | Вставка (сек) | Поиск (сек) | Удаление (сек) |
|
||
|-------|---------------|-------------|----------------|
|
||
| Случайный | 6.2254 | 0.0446 | 0.0286 |
|
||
| Отсортированный | 5.9099 | 0.0058 | 0.0006 |
|
||
|
||
### 2. Хеш-таблица
|
||
|
||
| Режим | Вставка (сек) | Поиск (сек) | Удаление (сек) |
|
||
|-------|---------------|-------------|----------------|
|
||
| Случайный | 0.4748 | 0.0014 | 0.0006 |
|
||
| Отсортированный | 0.3728 | 0.0002 | 0.0001 |
|
||
|
||
### 3. Двоичное дерево поиска (BST)
|
||
|
||
| Режим | Вставка (сек) | Поиск (сек) | Удаление (сек) |
|
||
|-------|---------------|-------------|----------------|
|
||
| Случайный | 0.0240 | 0.0002 | 0.0001 |
|
||
| Отсортированный | 6.6866 | 0.0005 | 0.0008 |
|
||
|
||
## Анализ результатов
|
||
|
||
### 1. Влияние порядка данных на BST
|
||
При добавлении уже отсортированных элементов BST вырождается в линейную структуру — сложность падает с O(log n) до O(n).
|
||
Время вставки выросло с 0.0240 до 6.6866 секунд — замедление в 278.7 раза.
|
||
|
||
### 2. Почему хеш-таблица не чувствительна к порядку
|
||
|
||
Хеш-функция равномерно распределяет ключи по корзинам независимо от их исходного порядка. Поэтому последовательность добавления практически не влияет на производительность.
|
||
Сравнение случайного и упорядоченного ввода:
|
||
- Случайный режим: 0.4748 с
|
||
- Упорядоченный режим: 0.3728 с
|
||
- Различие: 0.79
|
||
|
||
### 3. Почему связный список медленный при поиске
|
||
|
||
Поиск в связном списке требует линейного обхода O(n) — структура не поддерживает произвольный доступ. Это делает его непригодным для крупных справочников, где нужен быстрый поиск по ключу.
|
||
|
||
Сравнение скорости поиска на случайных данных:
|
||
- LinkedList: 0.0446 сек
|
||
- HashTable: 0.0014 сек (преимущество в 30.8)
|
||
- BST: 0.0002 сек
|
||
|
||
### 4. Сравнение удаления
|
||
|
||
| Структура | Сложность | Время на 50 удалений (случайные данные) |
|
||
|-----------|-----------|------------------------------------------|
|
||
| Связный список | O(n) | 0.0286 сек|
|
||
| Хеш-таблица | O(1) в среднем | 0.0006 сек |
|
||
| BST | O(log n) в среднем | 0.0001 сек |
|
||
|
||
## Вывод:
|
||
|
||
| Задача | Рекомендация | Почему |
|
||
|--------|-------------|--------|
|
||
| Частый поиск | Хеш-таблица | O(1) в среднем, не зависит от порядка |
|
||
| Частые вставки/удаления | Хеш-таблица | Амортизированное O(1) |
|
||
| Нужен отсортированный вывод | Сбалансированное дерево (AVL/Red-Black) | In-order обход даёт сортировку |
|
||
| Мало данных (<100 элементов) | Связный список или массив | Простота, накладные расходы не оправданы |
|
||
| Последовательный доступ (очередь/стек) | Связный список | Вставка/удаление в начало/конец за O(1) |
|
||
|
||
## Заключение
|
||
Проведённый эксперимент подтверждает теоретические оценки сложности:
|
||
|
||
1. **Небалансированное BST это плохой выбор** при работе с реальными данными, которые могут оказаться упорядоченными. Деградация до O(n) делает его непригодным для надёжных систем.
|
||
|
||
2. **Хеш-таблица показывает стабильные результаты** вне зависимости от порядка входных данных — ключевое преимущество для телефонного справочника с произвольными именами абонентов.
|
||
|
||
3. **Связный список — нишевый инструмент**, эффективный только при работе с малыми объёмами данных.
|
||
|