diff --git a/SmirnovaVYu/docs/otchet.docx b/SmirnovaVYu/docs/otchet.docx new file mode 100644 index 0000000..46acd26 Binary files /dev/null and b/SmirnovaVYu/docs/otchet.docx differ diff --git a/SmirnovaVYu/docs/performance_chart.png b/SmirnovaVYu/docs/performance_chart.png new file mode 100644 index 0000000..a5f9cf8 Binary files /dev/null and b/SmirnovaVYu/docs/performance_chart.png differ diff --git a/SmirnovaVYu/docs/report.md b/SmirnovaVYu/docs/report.md new file mode 100644 index 0000000..78419ea --- /dev/null +++ b/SmirnovaVYu/docs/report.md @@ -0,0 +1,89 @@ +# Отчёт по лабораторной работе + +## Цель работы + +Реализовать три структуры данных «с нуля» (связный список, хеш-таблица, двоичное дерево поиска), применить их для хранения записей телефонного справочника и экспериментально сравнить производительность основных операций. + +## Параметры эксперимента + +- Количество записей: 10000 +- Количество повторов каждого теста: 5 +- Размер хеш-таблицы: 1000 корзин + +## Результаты экспериментов + +### 1. Связный список + +| Режим | Вставка (сек) | Поиск (сек) | Удаление (сек) | +|-------|---------------|-------------|----------------| +| Случайный | 3.0333 | 0.0231 | 0.0157 | +| Отсортированный | 2.8224 | 0.0027 | 0.0003 | + +### 2. Хеш-таблица + +| Режим | Вставка (сек) | Поиск (сек) | Удаление (сек) | +|-------|---------------|-------------|----------------| +| Случайный | 0.1966 | 0.0007 | 0.0004 | +| Отсортированный | 0.1950 | 0.0001 | 0.0001 | + +### 3. Двоичное дерево поиска (BST) + +| Режим | Вставка (сек) | Поиск (сек) | Удаление (сек) | +|-------|---------------|-------------|----------------| +| Случайный | 0.0116 | 0.0001 | 0.0001 | +| Отсортированный | 3.0238 | 0.0003 | 0.0004 | + +## Анализ результатов + +### 1. Влияние порядка данных на BST + +На отсортированных данных BST деградирует с O(log n) до O(n). +Время вставки увеличилось с 0.0116 до 3.0238 секунд — в 259.6 раз. + +### 2. Почему хеш-таблица не чувствительна к порядку + +Хеш-функция распределяет элементы случайно, порядок ввода не влияет на позицию элемента. + +Разница между случайным и отсортированным порядком: +- Вставка: 0.1966 vs 0.1950 +- Отношение: 0.99x (почти не чувствительна) + +### 3. Почему связный список медленный при поиске + +Поиск требует последовательного прохода O(n) без возможности индексации. +Поэтому связный список хорош только когда записей мало. +Для больших телефонных справочников он не подходит. + +Сравнение скорости поиска (случайные данные): +- LinkedList: 0.0231 сек +- HashTable: 0.0007 сек (в 30.9 раз быстрее) +- BST: 0.0001 сек + +### 4. Сравнение удаления + +| Структура | Сложность | Время на 50 удалений (случайные данные) | +|-----------|-----------|------------------------------------------| +| Связный список | O(n) | 0.0157 сек | +| Хеш-таблица | O(1) в среднем | 0.0004 сек | +| BST | O(log n) в среднем | 0.0001 сек | + +## Вывод: + +| Задача | Рекомендация | Почему | +|--------|-------------|--------| +| Частый поиск | Хеш-таблица | O(1) в среднем, не зависит от порядка | +| Частые вставки/удаления | Хеш-таблица | Амортизированное O(1) | +| Нужен отсортированный вывод | Сбалансированное дерево (AVL/Red-Black) | In-order обход даёт сортировку | +| Мало данных (<100 элементов) | Связный список или массив | Простота, накладные расходы не оправданы | +| Последовательный доступ (очередь/стек) | Связный список | Вставка/удаление в начало/конец за O(1) | + +## Заключение + +Эксперимент наглядно демонстрирует: +1. **BST без балансировки опасен** — на отсортированных данных он деградирует до O(n) +2. **Хеш-таблица стабильна** — её производительность не зависит от порядка входных данных +3. **Связный список** подходит только для специфических задач с малым объёмом данных + +## Дата выполнения + +2026-05-21 14:44:41