5.5 KiB
Отчёт по лабораторной работе
Цель работы
Реализовать три структуры данных «с нуля» (связный список, хеш-таблица, двоичное дерево поиска), применить их для хранения записей телефонного справочника и экспериментально сравнить производительность основных операций.
Параметры эксперимента
- Количество записей: 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) |
Заключение
Проведённый эксперимент подтверждает теоретические оценки сложности:
-
Небалансированное BST это плохой выбор при работе с реальными данными, которые могут оказаться упорядоченными. Деградация до O(n) делает его непригодным для надёжных систем.
-
Хеш-таблица показывает стабильные результаты вне зависимости от порядка входных данных — ключевое преимущество для телефонного справочника с произвольными именами абонентов.
-
Связный список — нишевый инструмент, эффективный только при работе с малыми объёмами данных.