3.8 KiB
3.8 KiB
Отчет по лабораторной работе "Структуры данных"
1)Среднее время выполнения (в секундах)
| Структура | Режим | Вставка (1000) | Поиск (110) | Удаление (50) |
|---|---|---|---|---|
| LinkedList | случайный | 0.574278 | 0.027799 | 0.385323 |
| LinkedList | отсортированный | 0.389446 | — | — |
| HashTable | случайный | 0.036228 | 0.001376 | 0.027784 |
| HashTable | отсортированный | 0.041256 | — | — |
| BST | случайный | 0.007626 | 0.000781 | 0.008064 |
| BST | отсортированный | 0.463135 | — | — |
2)Графическое представление график в коде
Диаграмма сравнения времени выполнения операций для трёх структур данных
3)Анализ результатов
- Влияние порядка данных на BST
| Параметр | Случайный порядок | Отсортированный порядок | Изменение |
|---|---|---|---|
| Время вставки | 0.0076 сек | 0.4631 сек | намного медленнее |
Каждый новый элемент добавляется в самый правый узел, и дерево теряет свою сбалансированность.
- Устойчивость хеш-таблицы к порядку данных
| Параметр | Случайный порядок | Отсортированный порядок |
|---|---|---|
| Время вставки | 0.0362 сек | 0.0413 сек |
Хеш-функция sum(ord(ch)) % size равномерно распределяет записи. Даже если имена приходят отсортированными, они попадают в разные корзины случайным образом.
- Медлительность связного списка при поиске
| Операция | LinkedList | HashTable | BST (случайный) |
|---|---|---|---|
| Поиск (110 записей) | 0.0278 сек | 0.0014 сек | 0.0008 сек |
- Хеш-таблица быстрее связного списка в 20 раз
- BST быстрее связного списка в 35 раз Поиск в связном списке требует линейного прохода от головы до конца:
· В худшем случае нужно проверить все 1000 элементов · Нельзя "перепрыгнуть" к нужному элементу
- Сравнение операций удаления
| Структура | Время удаления (50 записей) |
|---|---|
| LinkedList | 0.3853 сек |
| HashTable | 0.0278 сек |
| BST (случайный) | 0.0081 сек |
BST и хеш-таблица значительно превосходят связный список по скорости удаления 5)итог
- Для частого поиска → Хеш-таблица (O(1))
- Для частых вставок/удалений на случайных данных → BST (O(log n))
- Для получения данных в отсортированном порядке → BST (in-order обход)
- Для маленьких объёмов данных → любой, но LinkedList проще
- Для отсортированных входных данных → НЕ использовать BST (деградация до O(n))