summarizing the results of the work performed

This commit is contained in:
4eker 2026-05-10 18:50:24 +03:00
parent af1a7f60ab
commit 15402bc076
3 changed files with 58 additions and 18 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

View File

@ -1,19 +1,19 @@
Структура,Режим,Операция,Время (сек)
LinkedList,случайный,вставка,4.791107272799854
LinkedList,сортированный,вставка,5.242345250000653
LinkedList,случайный,поиск,0.12513352360037971
LinkedList,сортированный,поиск,0.0488736079998489
LinkedList,случайный,удаление,0.035343319200183035
LinkedList,сортированный,удаление,0.0433979294000892
HashTable,случайный,вставка,0.07157636960037053
HashTable,сортированный,вставка,0.022270291600580094
HashTable,случайный,поиск,0.0005006769999454264
HashTable,сортированный,поиск,0.0003584531994420104
HashTable,случайный,удаление,0.00021688099950551988
HashTable,сортированный,удаление,0.00018475759934517556
BinaryTree,случайный,вставка,0.04002425920043606
BinaryTree,сортированный,вставка,0.011209254199638963
BinaryTree,случайный,поиск,0.0007849900001019705
BinaryTree,сортированный,поиск,0.0007412777995341457
BinaryTree,случайный,удаление,0.0002893609998864122
BinaryTree,сортированный,удаление,0.0005448235999210738
LinkedList,случайный,вставка,5.446558486199502
LinkedList,сортированный,вставка,4.543784373601374
LinkedList,случайный,поиск,0.04706894100017962
LinkedList,сортированный,поиск,0.04769594539902755
LinkedList,случайный,удаление,0.03921282640003483
LinkedList,сортированный,удаление,0.028603866600315088
HashTable,случайный,вставка,0.04496854659882956
HashTable,сортированный,вставка,0.01674557240039576
HashTable,случайный,поиск,0.0002827729993441608
HashTable,сортированный,поиск,0.0003012509994732682
HashTable,случайный,удаление,0.0001654567997320555
HashTable,сортированный,удаление,0.00015406959937536158
BinaryTree,случайный,вставка,0.04737361820007209
BinaryTree,сортированный,вставка,0.008165915000427048
BinaryTree,случайный,поиск,0.0008410817987169139
BinaryTree,сортированный,поиск,0.0005058431990619284
BinaryTree,случайный,удаление,0.0004901104002783541
BinaryTree,сортированный,удаление,0.00044584080096683466

1 Структура Режим Операция Время (сек)
2 LinkedList случайный вставка 4.791107272799854 5.446558486199502
3 LinkedList сортированный вставка 5.242345250000653 4.543784373601374
4 LinkedList случайный поиск 0.12513352360037971 0.04706894100017962
5 LinkedList сортированный поиск 0.0488736079998489 0.04769594539902755
6 LinkedList случайный удаление 0.035343319200183035 0.03921282640003483
7 LinkedList сортированный удаление 0.0433979294000892 0.028603866600315088
8 HashTable случайный вставка 0.07157636960037053 0.04496854659882956
9 HashTable сортированный вставка 0.022270291600580094 0.01674557240039576
10 HashTable случайный поиск 0.0005006769999454264 0.0002827729993441608
11 HashTable сортированный поиск 0.0003584531994420104 0.0003012509994732682
12 HashTable случайный удаление 0.00021688099950551988 0.0001654567997320555
13 HashTable сортированный удаление 0.00018475759934517556 0.00015406959937536158
14 BinaryTree случайный вставка 0.04002425920043606 0.04737361820007209
15 BinaryTree сортированный вставка 0.011209254199638963 0.008165915000427048
16 BinaryTree случайный поиск 0.0007849900001019705 0.0008410817987169139
17 BinaryTree сортированный поиск 0.0007412777995341457 0.0005058431990619284
18 BinaryTree случайный удаление 0.0002893609998864122 0.0004901104002783541
19 BinaryTree сортированный удаление 0.0005448235999210738 0.00044584080096683466

View File

@ -0,0 +1,40 @@
# Предложенные вопросы:
## Сравните:
1) Как порядок входных данных влияет на скорость вставки в BST(деградация до O(n) на отсортированных данных).
2) Почему хеш-таблица почти не чувствительна к порядку.
3) Почему связный список всегда медленен при поиске.
4) Как удаление работает в каждой структуре.
5) Вывод должен содержать ответ на вопрос: какую структуру и для каких задач (частые вставки, частый поиск, необходимость получать данные в порядке) стоит выбирать в реальной жизни.*
# Анализ результатов:
![[analysis.png]]
>График созданный для на основе замеров времени работы разных типов данных
>P.s. Данные на графиках не точные, а приблизительные, из-за во многом случайных замеров значений
## Выводы:
### 1) **Как порядок входных данных влияет на скорость вставки в BST?**
Порядок отличается очень сильно, если в обычном случае сложность равна $O(log(n))$, а в худшем случае(как раз в случае отсортированных данных) равна $O(n)$.
>В моём случае время работы мало отличимо так как, во время замеров, я заметил, что данные записываются крайне долго за счёт особенностей реализации(бинарное дерево вырождалось в связный список) и пришлось добавить ещё одну функцию, которая будет искусственно разбивать отсортированный массив на 2 ветки, а не записывать все ветви подряд
### 2) **Почему хеш-таблица почти не чувствительна к порядку?**
Из-за особенностей записи данных в память. Хеш-таблица вычисляет, номер строки при помощи формулы т.е мы можем найти любой сколь угодный элемент за $O(1)$
### 3) **Почему связный список всегда медленен при поиске?**
Из-за способа записи. Так-как мы можем добраться до следующего элемента только путём перебора равного номеру поисковой строки, при сложности $O(n)$
### 4) Как удаление работает в каждой структуре?
- **Связный список**
Рассматривается 3 случая:
1) Если список пустой, **возращаем пустой список**
2) Если удаляем голову, то **возвращаем, как голову следующий элемент списка**
3) Если мы удаляем промежуточный элемент, ищем нужный элемент а потом **подменяем элементу стоящем перед элементом, который мы ищем ссылку элемента идущему после удаления**
- **Хеш-таблица**
Реализация считает при помощи Хеш-ключа, номер элемента
> P.s. В моей реализации Хеш-таблица и связный список схожи по реализации, потому что Хеш-таблица использует функцию связного списка)
- **Бинарное дерево**
Рассмотрим так же 4 случая(немного схожа со связным списком с поправкой на то, что потомок может быть не один):
1) Если список пустой, **возращаем пустой список**
2) Если элемент слева, то **спускаемся в левую ветвь**
3) Если элемент справа, то **спускаемся в правую ветвь**
4) Если ветки 2, то **как-то оцениваем обе вершины и двигаемся к нужному результату**
При нахождении элемента элементу слева от найденного передаём ссылку на правый от найденного элемента и наоборот левому элементу ссылку на правый
###
5) Какую структуру и для каких задач (частые вставки, частый поиск, необходимость получать данные в порядке) стоит выбирать в реальной жизни?
- Для частых вставок и поиска элементов следует использовать Хеш-таблицы, из-за особенностей добавления (определение номера в таблицы при помощи математической формулы, а не порядковым номером)
- В случае, если нам надо использовать упорядоченные данные, то следует использовать бинарное дерево(из-за особенностей хранения)
>P.s. Вывод 0) Как же долго работает функция print()...