2026-rff_mp/ZelentsovAV/docs/report.md
2026-05-21 19:38:10 +03:00

5.5 KiB
Raw Blame History

Отчёт по лабораторной работе

Цель работы

Реализовать три структуры данных «с нуля» (связный список, хеш-таблица, двоичное дерево поиска), применить их для хранения записей телефонного справочника и экспериментально сравнить производительность основных операций.

Параметры эксперимента

  • Количество записей: 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. Связный список — нишевый инструмент, эффективный только при работе с малыми объёмами данных.