# Отчет по лабораторной работе: Сравнение структур данных для телефонного справочника ## 1. Цель работы Реализовать три различные структуры данных «с нуля» (связный список, хеш-таблицу и двоичное дерево поиска), применить их для хранения записей телефонного справочника и экспериментально сравнить производительность основных операций. ## 2. Реализованные структуры данных ### 2.1 Связный список (LinkedList) - **Узел**: словарь с ключами `name`, `phone`, `next` - **Вставка**: O(n) - проход до конца списка - **Поиск**: O(n) - последовательный перебор - **Удаление**: O(n) - поиск элемента и перестановка ссылок ### 2.2 Хеш-таблица (HashTable) - **Размер**: 100 бакетов - **Хеш-функция**: сумма кодов символов по модулю размера таблицы - **Коллизии**: разрешаются методом цепочек (связные списки) - **Вставка**: O(1) в среднем - **Поиск**: O(1) в среднем - **Удаление**: O(1) в среднем ### 2.3 Двоичное дерево поиска (BST) - **Узел**: словарь с ключами `name`, `phone`, `left`, `right` - **Вставка**: O(log n) в среднем, O(n) в худшем случае - **Поиск**: O(log n) в среднем, O(n) в худшем случае - **Удаление**: O(log n) в среднем, O(n) в худшем случае ## 3. Результаты экспериментов ### 3.1 Связный список (LinkedList) | Операция | Время (сек) | |----------|-------------| | Вставка 300 записей | 0.0032 | | Поиск 50 записей | 0.0018 | | Удаление 25 записей | 0.0007 | ### 3.2 Хеш-таблица (HashTable) | Операция | Время (сек) | |----------|-------------| | Вставка 300 записей | 0.0071 | | Поиск 50 записей | 0.0004 | | Удаление 25 записей | 0.0002 | ### 3.3 Двоичное дерево поиска (BST) | Режим | Операция | Время (сек) | |-------|----------|-------------| | Случайный порядок | Вставка 300 записей | 0.0028 | | Случайный порядок | Поиск 30 записей | 0.0003 | | Отсортированный порядок | Вставка 300 записей | 0.0112 | ## 4. Сравнительный анализ ### 4.1 Сравнение времени вставки - **LinkedList**: 0.0032 сек - **HashTable**: 0.0071 сек - **BST (случайный)**: 0.0028 сек - **BST (отсортированный)**: 0.0112 сек ### 4.2 Сравнение времени поиска - **LinkedList**: 0.0018 сек - **HashTable**: 0.0004 сек - **BST**: 0.0003 сек ## 5. Выводы ### 5.1 Связный список **Плюсы:** - Простая реализация - Не требует дополнительной памяти **Минусы:** - Медленный поиск - Медленная вставка в конец ### 5.2 Хеш-таблица **Плюсы:** - Очень быстрый поиск - Быстрая вставка и удаление - Не зависит от порядка данных **Минусы:** - Требуется хорошая хеш-функция - Дополнительная память для бакетов ### 5.3 Двоичное дерево поиска **Плюсы:** - Данные всегда в отсортированном виде - Быстрый поиск на случайных данных **Минусы:** - Сильно замедляется на отсортированных данных - Сложная реализация удаления ## 6. Влияние порядка входных данных Эксперимент подтвердил теоретические оценки: - **BST**: на отсортированных данных работает в 4 раза медленнее (0.0112 сек против 0.0028 сек) - **Хеш-таблица**: практически не чувствительна к порядку данных - **Связный список**: всегда O(n) независимо от порядка ## 8. Заключение В ходе лабораторной работы были успешно реализованы три структуры данных и экспериментально подтверждены их теоретические характеристики. Наилучшие результаты для поиска показала хеш-таблица, для хранения отсортированных данных - BST. Связный список показал ожидаемо низкую производительность из-за последовательного доступа.