73 lines
3.8 KiB
Markdown
73 lines
3.8 KiB
Markdown
|
|
Отчет по лабораторной работе "Структуры данных"
|
|||
|
|
|
|||
|
|
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)Анализ результатов
|
|||
|
|
|
|||
|
|
1. Влияние порядка данных на BST
|
|||
|
|
|
|||
|
|
| Параметр | Случайный порядок | Отсортированный порядок | Изменение |
|
|||
|
|
|----------|-------------------|------------------------|-----------|
|
|||
|
|
| Время вставки | 0.0076 сек | 0.4631 сек | намного медленнее |
|
|||
|
|
|
|||
|
|
Каждый новый элемент добавляется в самый правый узел, и дерево теряет свою сбалансированность.
|
|||
|
|
|
|||
|
|
|
|||
|
|
2. Устойчивость хеш-таблицы к порядку данных
|
|||
|
|
|
|||
|
|
| Параметр | Случайный порядок | Отсортированный порядок
|
|||
|
|
|----------|-------------------|------------------------|
|
|||
|
|
| Время вставки | 0.0362 сек | 0.0413 сек |
|
|||
|
|
|
|||
|
|
|
|||
|
|
Хеш-функция `sum(ord(ch)) % size` равномерно распределяет записи. Даже если имена приходят отсортированными, они попадают в разные корзины случайным образом.
|
|||
|
|
|
|||
|
|
|
|||
|
|
3. Медлительность связного списка при поиске
|
|||
|
|
|
|||
|
|
| Операция | LinkedList | HashTable | BST (случайный) |
|
|||
|
|
|----------|------------|-----------|-----------------|
|
|||
|
|
| Поиск (110 записей) | 0.0278 сек | 0.0014 сек | 0.0008 сек |
|
|||
|
|
|
|||
|
|
- Хеш-таблица быстрее связного списка в 20 раз
|
|||
|
|
- BST быстрее связного списка в 35 раз
|
|||
|
|
Поиск в связном списке требует линейного прохода от головы до конца:
|
|||
|
|
|
|||
|
|
· В худшем случае нужно проверить все 1000 элементов
|
|||
|
|
· Нельзя "перепрыгнуть" к нужному элементу
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
4. Сравнение операций удаления
|
|||
|
|
|
|||
|
|
| Структура | Время удаления (50 записей) |
|
|||
|
|
|-----------|----------------------------|
|
|||
|
|
| LinkedList | 0.3853 сек
|
|||
|
|
| HashTable | 0.0278 сек
|
|||
|
|
| BST (случайный) | 0.0081 сек
|
|||
|
|
|
|||
|
|
BST и хеш-таблица значительно превосходят связный список по скорости удаления
|
|||
|
|
5)итог
|
|||
|
|
1. Для частого поиска → Хеш-таблица (O(1))
|
|||
|
|
2. Для частых вставок/удалений на случайных данных → BST (O(log n))
|
|||
|
|
3. Для получения данных в отсортированном порядке → BST (in-order обход)
|
|||
|
|
4. Для маленьких объёмов данных → любой, но LinkedList проще
|
|||
|
|
5. Для отсортированных входных данных → НЕ использовать BST (деградация до O(n))
|