3.4 KiB
Анализ результатов
1. Как порядок входных данных влияет на скорость вставки в BST
BST работает быстро только если дерево сбалансировано.
При случайном порядке глубина дерева ≈ O(log n), поэтому вставка быстрая.
Но при отсортированных данных дерево вырождается в цепочку.
Вставка становится:
- O(n) на одну операцию
- O(n²) на вставку всех элементов
Это приводит к резкому росту времени (в эксперименте: 0.02 сек → 5.23 сек).
2. Почему хеш‑таблица почти не чувствительна к порядку
Хеш‑функция распределяет элементы по бакетам независимо от порядка входа.
Поэтому:
- вставка ≈ O(1)
- поиск ≈ O(1)
- удаление ≈ O(1)
Даже если данные отсортированы, хеш‑таблица работает одинаково быстро.
3. Почему связный список всегда медленный при поиске
Связный список не имеет индексов.
Поиск идёт последовательно: head → next → next → ...
Поэтому:
- поиск = O(n)
- вставка в конец = O(n)
- удаление = O(n)
Это делает его самой медленной структурой для телефонного справочника.
4. Как работает удаление в каждой структуре
Связный список
- ищем предыдущий узел
- перенаправляем ссылки
- сложность: O(n)
Хеш‑таблица
- вычисляем бакет
- удаляем элемент в маленьком списке внутри бакета
- сложность: O(1) в среднем
BST
3 случая:
- лист
- один потомок
- два потомка (замена на inorder‑преемника)
Сложность:
- O(log n) в среднем
- O(n) в худшем случае (несбалансированное дерево)
5. Какую структуру выбирать в реальной жизни
| Задача | Лучшая структура | Причина |
|---|---|---|
| Частые вставки | HashTable | O(1) |
| Частый поиск | HashTable | O(1) |
| Частое удаление | HashTable | O(1) |
| Нужен отсортированный вывод | BST | in‑order обход |
| Маленькие данные | Любая | Разницы нет |
| Учебные цели | LinkedList | Простая структура |
Общий вывод:
В реальных приложениях телефонный справочник почти всегда реализуют через хеш‑таблицу, так как она обеспечивает лучшую производительность для вставки, поиска и удаления.