# Отчёт по лабораторной работе ## Цель работы Реализовать три структуры данных «с нуля» (связный список, хеш-таблица, двоичное дерево поиска), применить их для хранения записей телефонного справочника и экспериментально сравнить производительность основных операций. ## Параметры эксперимента - Количество записей: 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. **Связный список — нишевый инструмент**, эффективный только при работе с малыми объёмами данных.