5.5 KiB
Отчёт по лабораторной работе
Цель работы
Реализовать три структуры данных «с нуля» (связный список, хеш-таблица, двоичное дерево поиска), применить их для хранения записей телефонного справочника и экспериментально сравнить производительность основных операций.
Параметры эксперимента
- Количество записей: 10000
- Количество повторов каждого теста: 5
- Размер хеш-таблицы: 1000 корзин
Результаты экспериментов
1. Связный список
| Режим | Вставка (сек) | Поиск (сек) | Удаление (сек) |
|---|---|---|---|
| Случайный | 2.3864 | 0.0258 | 0.0167 |
| Отсортированный | 2.2990 | 0.0040 | 0.0003 |
2. Хеш-таблица
| Режим | Вставка (сек) | Поиск (сек) | Удаление (сек) |
|---|---|---|---|
| Случайный | 0.0154 | 0.0001 | 0.0001 |
| Отсортированный | 0.0144 | 0.0001 | 0.0000 |
3. Двоичное дерево поиска (BST)
| Режим | Вставка (сек) | Поиск (сек) | Удаление (сек) |
|---|---|---|---|
| Случайный | 0.0162 | 0.0001 | 0.0001 |
| Отсортированный | 2.9662 | 0.0003 | 0.0006 |
Анализ результатов
1. Влияние порядка данных на BST
При добавлении уже отсортированных элементов BST вырождается в линейную структуру — сложность падает с O(log n) до O(n).
Время вставки выросло с 0.0162 до 2.9662 секунд — замедление в 183.2 раза.
2. Почему хеш-таблица не чувствительна к порядку
Хеш-функция равномерно распределяет ключи по корзинам независимо от их исходного порядка. Поэтому последовательность добавления практически не влияет на производительность. Сравнение случайного и упорядоченного ввода:
- Случайный режим: 0.0154 с
- Упорядоченный режим: 0.0144 с
- Различие: 0.94
3. Почему связный список медленный при поиске
Поиск в связном списке требует линейного обхода O(n) — структура не поддерживает произвольный доступ. Это делает его непригодным для крупных справочников, где нужен быстрый поиск по ключу.
Сравнение скорости поиска на случайных данных:
- LinkedList: 0.0258 сек
- HashTable: 0.0001 сек (преимущество в 227.9)
- BST: 0.0001 сек
4. Сравнение удаления
| Структура | Сложность | Время на 50 удалений (случайные данные) |
|---|---|---|
| Связный список | O(n) | 0.0167 сек |
| Хеш-таблица | O(1) в среднем | 0.0001 сек |
| BST | O(log n) в среднем | 0.0001 сек |
Вывод:
| Задача | Рекомендация | Почему |
|---|---|---|
| Частый поиск | Хеш-таблица | O(1) в среднем, не зависит от порядка |
| Частые вставки/удаления | Хеш-таблица | Амортизированное O(1) |
| Нужен отсортированный вывод | Сбалансированное дерево (AVL/Red-Black) | In-order обход даёт сортировку |
| Мало данных (<100 элементов) | Связный список или массив | Простота, накладные расходы не оправданы |
| Последовательный доступ (очередь/стек) | Связный список | Вставка/удаление в начало/конец за O(1) |
Заключение
Проведённый эксперимент подтверждает теоретические оценки сложности:
-
Небалансированное BST это плохой выбор при работе с реальными данными, которые могут оказаться упорядоченными. Деградация до O(n) делает его непригодным для надёжных систем.
-
Хеш-таблица показывает стабильные результаты вне зависимости от порядка входных данных — ключевое преимущество для телефонного справочника с произвольными именами абонентов.
-
Связный список — нишевый инструмент, эффективный только при работе с малыми объёмами данных.