forked from UNN/2026-rff_mp
оформление графиков, по полученным данным
This commit is contained in:
parent
62795e88ba
commit
6554e2ada1
BIN
stepushovgs/data-structures/source/docs/img/delete.pdf
Normal file
BIN
stepushovgs/data-structures/source/docs/img/delete.pdf
Normal file
Binary file not shown.
BIN
stepushovgs/data-structures/source/docs/img/insert.pdf
Normal file
BIN
stepushovgs/data-structures/source/docs/img/insert.pdf
Normal file
Binary file not shown.
BIN
stepushovgs/data-structures/source/docs/img/search.pdf
Normal file
BIN
stepushovgs/data-structures/source/docs/img/search.pdf
Normal file
Binary file not shown.
749
stepushovgs/data-structures/source/docs/main.ipynb
Normal file
749
stepushovgs/data-structures/source/docs/main.ipynb
Normal file
File diff suppressed because one or more lines are too long
|
|
@ -164,6 +164,12 @@ func (root *BSTree) insert(data ds.MyData) *BSTree {
|
||||||
return root
|
return root
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (bst *BinSearchTree) InsertAll(data []ds.MyData) {
|
||||||
|
for _, el := range data {
|
||||||
|
bst.Insert(el)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Delete удаляет узел по имени.
|
// Delete удаляет узел по имени.
|
||||||
// Возвращает нового потомка для родительского узла.
|
// Возвращает нового потомка для родительского узла.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -90,6 +90,12 @@ func (h *HashTable) Insert(new ds.MyData) {
|
||||||
h.size++
|
h.size++
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ht *HashTable) InsertAll(data []ds.MyData) {
|
||||||
|
for _, el := range data {
|
||||||
|
ht.Insert(el)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (h *HashTable) Search(name string) (phone string, status bool) {
|
func (h *HashTable) Search(name string) (phone string, status bool) {
|
||||||
ind := h.GetIndex(name)
|
ind := h.GetIndex(name)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -80,6 +80,12 @@ func (ll *LinkedList) Insert(data ds.MyData) {
|
||||||
current.next = newNode
|
current.next = newNode
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ll *LinkedList) InsertAll(data []ds.MyData) {
|
||||||
|
for _, el := range data {
|
||||||
|
ll.Insert(el)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (ll *LinkedList) Search(targetName string) (string, bool) {
|
func (ll *LinkedList) Search(targetName string) (string, bool) {
|
||||||
current := ll.head
|
current := ll.head
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,37 +1,199 @@
|
||||||
Structure,Mode,Operation,Time
|
Structure,Mode,Operation,Time
|
||||||
Связный список,Случайный,Вставка,0.047607
|
Связный список,Случайный,Вставка,0.047621
|
||||||
Связный список,Случайный,Вставка,0.050350
|
Связный список,Случайный,Поиск,0.003505
|
||||||
Связный список,Случайный,Вставка,0.049572
|
Связный список,Случайный,Удаление,0.005502
|
||||||
Связный список,Случайный,Вставка,0.049258
|
Связный список,Случайный,Вставка,0.048707
|
||||||
Связный список,Случайный,Вставка,0.048659
|
Связный список,Случайный,Поиск,0.003505
|
||||||
Связный список,Случайный,Вставка,0.049089
|
Связный список,Случайный,Удаление,0.006007
|
||||||
Связный список,Отсортированный,Вставка,0.047619
|
Связный список,Случайный,Вставка,0.048086
|
||||||
Связный список,Отсортированный,Вставка,0.047478
|
Связный список,Случайный,Поиск,0.003546
|
||||||
Связный список,Отсортированный,Вставка,0.048357
|
Связный список,Случайный,Удаление,0.006606
|
||||||
Связный список,Отсортированный,Вставка,0.048174
|
Связный список,Случайный,Вставка,0.049133
|
||||||
Связный список,Отсортированный,Вставка,0.048270
|
Связный список,Случайный,Поиск,0.003018
|
||||||
Связный список,Отсортированный,Вставка,0.047980
|
Связный список,Случайный,Удаление,0.006084
|
||||||
Хеш таблица,Случайный,Вставка,0.002014
|
Связный список,Случайный,Вставка,0.048328
|
||||||
Хеш таблица,Случайный,Вставка,0.002013
|
Связный список,Случайный,Поиск,0.003524
|
||||||
Хеш таблица,Случайный,Вставка,0.002008
|
Связный список,Случайный,Удаление,0.007066
|
||||||
Хеш таблица,Случайный,Вставка,0.001003
|
Связный список,Случайный,Вставка,0.047057
|
||||||
Хеш таблица,Случайный,Вставка,0.002505
|
Связный список,Случайный,Поиск,0.003518
|
||||||
Хеш таблица,Случайный,Вставка,0.001908
|
Связный список,Случайный,Удаление,0.006054
|
||||||
Хеш таблица,Отсортированный,Вставка,0.001514
|
Связный список,Случайный,Вставка,0.047979
|
||||||
Хеш таблица,Отсортированный,Вставка,0.001504
|
Связный список,Случайный,Поиск,0.003604
|
||||||
Хеш таблица,Отсортированный,Вставка,0.002012
|
Связный список,Случайный,Удаление,0.006039
|
||||||
Хеш таблица,Отсортированный,Вставка,0.001003
|
Связный список,Случайный,Вставка,0.047694
|
||||||
Хеш таблица,Отсортированный,Вставка,0.002506
|
Связный список,Случайный,Поиск,0.004520
|
||||||
Хеш таблица,Отсортированный,Вставка,0.001708
|
Связный список,Случайный,Удаление,0.005522
|
||||||
Бинарное дерево поиска,Случайный,Вставка,0.318901
|
Связный список,Случайный,Вставка,0.047864
|
||||||
Бинарное дерево поиска,Случайный,Вставка,0.320504
|
Связный список,Случайный,Поиск,0.003514
|
||||||
Бинарное дерево поиска,Случайный,Вставка,0.316685
|
Связный список,Случайный,Удаление,0.006814
|
||||||
Бинарное дерево поиска,Случайный,Вставка,0.315862
|
Связный список,Случайный,Вставка,0.048523
|
||||||
Бинарное дерево поиска,Случайный,Вставка,0.320947
|
Связный список,Случайный,Поиск,0.002611
|
||||||
Бинарное дерево поиска,Случайный,Вставка,0.318580
|
Связный список,Случайный,Удаление,0.006122
|
||||||
Бинарное дерево поиска,Отсортированный,Вставка,0.313718
|
Связный список,Случайный,Вставка (среднее),0.048099
|
||||||
Бинарное дерево поиска,Отсортированный,Вставка,0.318131
|
Связный список,Случайный,Поиск (среднее),0.003486
|
||||||
Бинарное дерево поиска,Отсортированный,Вставка,0.322564
|
Связный список,Случайный,Удаление (среднее),0.006181
|
||||||
Бинарное дерево поиска,Отсортированный,Вставка,0.315526
|
Связный список,Отсортированный,Вставка,0.046193
|
||||||
Бинарное дерево поиска,Отсортированный,Вставка,0.314289
|
Связный список,Отсортированный,Поиск,0.004520
|
||||||
Бинарное дерево поиска,Отсортированный,Вставка,0.316846
|
Связный список,Отсортированный,Удаление,0.005769
|
||||||
|
Связный список,Отсортированный,Вставка,0.048112
|
||||||
|
Связный список,Отсортированный,Поиск,0.003001
|
||||||
|
Связный список,Отсортированный,Удаление,0.007026
|
||||||
|
Связный список,Отсортированный,Вставка,0.047699
|
||||||
|
Связный список,Отсортированный,Поиск,0.003503
|
||||||
|
Связный список,Отсортированный,Удаление,0.006515
|
||||||
|
Связный список,Отсортированный,Вставка,0.047867
|
||||||
|
Связный список,Отсортированный,Поиск,0.003509
|
||||||
|
Связный список,Отсортированный,Удаление,0.006001
|
||||||
|
Связный список,Отсортированный,Вставка,0.047622
|
||||||
|
Связный список,Отсортированный,Поиск,0.003001
|
||||||
|
Связный список,Отсортированный,Удаление,0.006008
|
||||||
|
Связный список,Отсортированный,Вставка,0.047737
|
||||||
|
Связный список,Отсортированный,Поиск,0.003546
|
||||||
|
Связный список,Отсортированный,Удаление,0.005514
|
||||||
|
Связный список,Отсортированный,Вставка,0.048361
|
||||||
|
Связный список,Отсортированный,Поиск,0.003012
|
||||||
|
Связный список,Отсортированный,Удаление,0.005328
|
||||||
|
Связный список,Отсортированный,Вставка,0.049622
|
||||||
|
Связный список,Отсортированный,Поиск,0.003510
|
||||||
|
Связный список,Отсортированный,Удаление,0.005522
|
||||||
|
Связный список,Отсортированный,Вставка,0.048137
|
||||||
|
Связный список,Отсортированный,Поиск,0.003518
|
||||||
|
Связный список,Отсортированный,Удаление,0.005531
|
||||||
|
Связный список,Отсортированный,Вставка,0.048927
|
||||||
|
Связный список,Отсортированный,Поиск,0.004004
|
||||||
|
Связный список,Отсортированный,Удаление,0.005470
|
||||||
|
Связный список,Отсортированный,Вставка (среднее),0.048028
|
||||||
|
Связный список,Отсортированный,Поиск (среднее),0.003512
|
||||||
|
Связный список,Отсортированный,Удаление (среднее),0.005869
|
||||||
|
Хеш таблица,Случайный,Вставка,0.001504
|
||||||
|
Хеш таблица,Случайный,Поиск,0.000000
|
||||||
|
Хеш таблица,Случайный,Удаление,0.000000
|
||||||
|
Хеш таблица,Случайный,Вставка,0.002047
|
||||||
|
Хеш таблица,Случайный,Поиск,0.000000
|
||||||
|
Хеш таблица,Случайный,Удаление,0.000000
|
||||||
|
Хеш таблица,Случайный,Вставка,0.002010
|
||||||
|
Хеш таблица,Случайный,Поиск,0.000000
|
||||||
|
Хеш таблица,Случайный,Удаление,0.000000
|
||||||
|
Хеш таблица,Случайный,Вставка,0.002005
|
||||||
|
Хеш таблица,Случайный,Поиск,0.000000
|
||||||
|
Хеш таблица,Случайный,Удаление,0.000000
|
||||||
|
Хеш таблица,Случайный,Вставка,0.002513
|
||||||
|
Хеш таблица,Случайный,Поиск,0.000000
|
||||||
|
Хеш таблица,Случайный,Удаление,0.000000
|
||||||
|
Хеш таблица,Случайный,Вставка,0.001505
|
||||||
|
Хеш таблица,Случайный,Поиск,0.000000
|
||||||
|
Хеш таблица,Случайный,Удаление,0.000000
|
||||||
|
Хеш таблица,Случайный,Вставка,0.002529
|
||||||
|
Хеш таблица,Случайный,Поиск,0.000000
|
||||||
|
Хеш таблица,Случайный,Удаление,0.000000
|
||||||
|
Хеш таблица,Случайный,Вставка,0.001504
|
||||||
|
Хеш таблица,Случайный,Поиск,0.000000
|
||||||
|
Хеш таблица,Случайный,Удаление,0.000000
|
||||||
|
Хеш таблица,Случайный,Вставка,0.002023
|
||||||
|
Хеш таблица,Случайный,Поиск,0.000000
|
||||||
|
Хеш таблица,Случайный,Удаление,0.000000
|
||||||
|
Хеш таблица,Случайный,Вставка,0.002429
|
||||||
|
Хеш таблица,Случайный,Поиск,0.000000
|
||||||
|
Хеш таблица,Случайный,Удаление,0.000000
|
||||||
|
Хеш таблица,Случайный,Вставка (среднее),0.002007
|
||||||
|
Хеш таблица,Случайный,Поиск (среднее),0.000000
|
||||||
|
Хеш таблица,Случайный,Удаление (среднее),0.000000
|
||||||
|
Хеш таблица,Отсортированный,Вставка,0.002005
|
||||||
|
Хеш таблица,Отсортированный,Поиск,0.000000
|
||||||
|
Хеш таблица,Отсортированный,Удаление,0.000000
|
||||||
|
Хеш таблица,Отсортированный,Вставка,0.001282
|
||||||
|
Хеш таблица,Отсортированный,Поиск,0.000000
|
||||||
|
Хеш таблица,Отсортированный,Удаление,0.001504
|
||||||
|
Хеш таблица,Отсортированный,Вставка,0.001015
|
||||||
|
Хеш таблица,Отсортированный,Поиск,0.000000
|
||||||
|
Хеш таблица,Отсортированный,Удаление,0.000000
|
||||||
|
Хеш таблица,Отсортированный,Вставка,0.002016
|
||||||
|
Хеш таблица,Отсортированный,Поиск,0.000000
|
||||||
|
Хеш таблица,Отсортированный,Удаление,0.000000
|
||||||
|
Хеш таблица,Отсортированный,Вставка,0.001505
|
||||||
|
Хеш таблица,Отсортированный,Поиск,0.000000
|
||||||
|
Хеш таблица,Отсортированный,Удаление,0.000000
|
||||||
|
Хеш таблица,Отсортированный,Вставка,0.002016
|
||||||
|
Хеш таблица,Отсортированный,Поиск,0.000502
|
||||||
|
Хеш таблица,Отсортированный,Удаление,0.000000
|
||||||
|
Хеш таблица,Отсортированный,Вставка,0.002009
|
||||||
|
Хеш таблица,Отсортированный,Поиск,0.000000
|
||||||
|
Хеш таблица,Отсортированный,Удаление,0.000000
|
||||||
|
Хеш таблица,Отсортированный,Вставка,0.001068
|
||||||
|
Хеш таблица,Отсортированный,Поиск,0.000000
|
||||||
|
Хеш таблица,Отсортированный,Удаление,0.000000
|
||||||
|
Хеш таблица,Отсортированный,Вставка,0.002516
|
||||||
|
Хеш таблица,Отсортированный,Поиск,0.000000
|
||||||
|
Хеш таблица,Отсортированный,Удаление,0.000000
|
||||||
|
Хеш таблица,Отсортированный,Вставка,0.002505
|
||||||
|
Хеш таблица,Отсортированный,Поиск,0.000000
|
||||||
|
Хеш таблица,Отсортированный,Удаление,0.000000
|
||||||
|
Хеш таблица,Отсортированный,Вставка (среднее),0.001794
|
||||||
|
Хеш таблица,Отсортированный,Поиск (среднее),0.000050
|
||||||
|
Хеш таблица,Отсортированный,Удаление (среднее),0.000150
|
||||||
|
Бинарное дерево поиска,Случайный,Вставка,0.304277
|
||||||
|
Бинарное дерево поиска,Случайный,Поиск,0.007550
|
||||||
|
Бинарное дерево поиска,Случайный,Удаление,0.013564
|
||||||
|
Бинарное дерево поиска,Случайный,Вставка,0.297918
|
||||||
|
Бинарное дерево поиска,Случайный,Поиск,0.007167
|
||||||
|
Бинарное дерево поиска,Случайный,Удаление,0.014539
|
||||||
|
Бинарное дерево поиска,Случайный,Вставка,0.300777
|
||||||
|
Бинарное дерево поиска,Случайный,Поиск,0.008009
|
||||||
|
Бинарное дерево поиска,Случайный,Удаление,0.015144
|
||||||
|
Бинарное дерево поиска,Случайный,Вставка,0.307342
|
||||||
|
Бинарное дерево поиска,Случайный,Поиск,0.008307
|
||||||
|
Бинарное дерево поиска,Случайный,Удаление,0.013577
|
||||||
|
Бинарное дерево поиска,Случайный,Вставка,0.301149
|
||||||
|
Бинарное дерево поиска,Случайный,Поиск,0.007792
|
||||||
|
Бинарное дерево поиска,Случайный,Удаление,0.012897
|
||||||
|
Бинарное дерево поиска,Случайный,Вставка,0.304480
|
||||||
|
Бинарное дерево поиска,Случайный,Поиск,0.006521
|
||||||
|
Бинарное дерево поиска,Случайный,Удаление,0.014053
|
||||||
|
Бинарное дерево поиска,Случайный,Вставка,0.299029
|
||||||
|
Бинарное дерево поиска,Случайный,Поиск,0.007552
|
||||||
|
Бинарное дерево поиска,Случайный,Удаление,0.013073
|
||||||
|
Бинарное дерево поиска,Случайный,Вставка,0.304265
|
||||||
|
Бинарное дерево поиска,Случайный,Поиск,0.006518
|
||||||
|
Бинарное дерево поиска,Случайный,Удаление,0.014555
|
||||||
|
Бинарное дерево поиска,Случайный,Вставка,0.297193
|
||||||
|
Бинарное дерево поиска,Случайный,Поиск,0.007529
|
||||||
|
Бинарное дерево поиска,Случайный,Удаление,0.014092
|
||||||
|
Бинарное дерево поиска,Случайный,Вставка,0.300190
|
||||||
|
Бинарное дерево поиска,Случайный,Поиск,0.006525
|
||||||
|
Бинарное дерево поиска,Случайный,Удаление,0.014096
|
||||||
|
Бинарное дерево поиска,Случайный,Вставка (среднее),0.301662
|
||||||
|
Бинарное дерево поиска,Случайный,Поиск (среднее),0.007347
|
||||||
|
Бинарное дерево поиска,Случайный,Удаление (среднее),0.013959
|
||||||
|
Бинарное дерево поиска,Отсортированный,Вставка,0.317393
|
||||||
|
Бинарное дерево поиска,Отсортированный,Поиск,0.007554
|
||||||
|
Бинарное дерево поиска,Отсортированный,Удаление,0.013053
|
||||||
|
Бинарное дерево поиска,Отсортированный,Вставка,0.301527
|
||||||
|
Бинарное дерево поиска,Отсортированный,Поиск,0.006503
|
||||||
|
Бинарное дерево поиска,Отсортированный,Удаление,0.014265
|
||||||
|
Бинарное дерево поиска,Отсортированный,Вставка,0.300625
|
||||||
|
Бинарное дерево поиска,Отсортированный,Поиск,0.008043
|
||||||
|
Бинарное дерево поиска,Отсортированный,Удаление,0.013068
|
||||||
|
Бинарное дерево поиска,Отсортированный,Вставка,0.303297
|
||||||
|
Бинарное дерево поиска,Отсортированный,Поиск,0.007039
|
||||||
|
Бинарное дерево поиска,Отсортированный,Удаление,0.013601
|
||||||
|
Бинарное дерево поиска,Отсортированный,Вставка,0.300072
|
||||||
|
Бинарное дерево поиска,Отсортированный,Поиск,0.008539
|
||||||
|
Бинарное дерево поиска,Отсортированный,Удаление,0.013535
|
||||||
|
Бинарное дерево поиска,Отсортированный,Вставка,0.298420
|
||||||
|
Бинарное дерево поиска,Отсортированный,Поиск,0.007256
|
||||||
|
Бинарное дерево поиска,Отсортированный,Удаление,0.013550
|
||||||
|
Бинарное дерево поиска,Отсортированный,Вставка,0.298652
|
||||||
|
Бинарное дерево поиска,Отсортированный,Поиск,0.008040
|
||||||
|
Бинарное дерево поиска,Отсортированный,Удаление,0.013532
|
||||||
|
Бинарное дерево поиска,Отсортированный,Вставка,0.299859
|
||||||
|
Бинарное дерево поиска,Отсортированный,Поиск,0.007577
|
||||||
|
Бинарное дерево поиска,Отсортированный,Удаление,0.013575
|
||||||
|
Бинарное дерево поиска,Отсортированный,Вставка,0.307201
|
||||||
|
Бинарное дерево поиска,Отсортированный,Поиск,0.008025
|
||||||
|
Бинарное дерево поиска,Отсортированный,Удаление,0.014125
|
||||||
|
Бинарное дерево поиска,Отсортированный,Вставка,0.304290
|
||||||
|
Бинарное дерево поиска,Отсортированный,Поиск,0.007040
|
||||||
|
Бинарное дерево поиска,Отсортированный,Удаление,0.013611
|
||||||
|
Бинарное дерево поиска,Отсортированный,Вставка (среднее),0.303134
|
||||||
|
Бинарное дерево поиска,Отсортированный,Поиск (среднее),0.007562
|
||||||
|
Бинарное дерево поиска,Отсортированный,Удаление (среднее),0.013591
|
||||||
|
|
|
||||||
|
|
|
@ -17,22 +17,23 @@ import (
|
||||||
|
|
||||||
const (
|
const (
|
||||||
countUsers = 10_000
|
countUsers = 10_000
|
||||||
countRepeat = 5
|
countRepeat = 10
|
||||||
countRandomSearch = 100
|
countRandomSearch = 200
|
||||||
countNotExitstSearch = 10
|
countNotExitstSearch = 100
|
||||||
countDeletes = 50
|
countDeletes = 500
|
||||||
)
|
)
|
||||||
|
|
||||||
type TestData struct {
|
type TestData struct {
|
||||||
Items []ds.MyData // все записи
|
Items []ds.MyData // все записи
|
||||||
ItemsSorted []ds.MyData // все записи отсортированные
|
ItemsSorted []ds.MyData // все записи отсортированные
|
||||||
Existing []ds.MyData // для поиска (существующие)
|
Search []ds.MyData // для поиска (существующие и несуществующие)
|
||||||
NonExisting []ds.MyData // для поиска (несуществующие)
|
|
||||||
ToDelete []ds.MyData // для удаления
|
ToDelete []ds.MyData // для удаления
|
||||||
|
UniqueItems []ds.MyData // Уникальные элементы для тестов
|
||||||
}
|
}
|
||||||
|
|
||||||
type DataStructure interface {
|
type DataStructure interface {
|
||||||
Insert(data ds.MyData)
|
Insert(data ds.MyData)
|
||||||
|
InsertAll(data []ds.MyData)
|
||||||
Search(name string) (string, bool)
|
Search(name string) (string, bool)
|
||||||
Delete(name string) bool
|
Delete(name string) bool
|
||||||
Len() int
|
Len() int
|
||||||
|
|
@ -97,17 +98,35 @@ func GenerateTestData() TestData {
|
||||||
// fmt.Println(randInd)
|
// fmt.Println(randInd)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, el := range notExisting {
|
||||||
|
existing = append(existing, el)
|
||||||
|
}
|
||||||
|
|
||||||
|
// toDelete = make([]ds.MyData, countDeletes)
|
||||||
|
usedIndices := make(map[int]bool)
|
||||||
|
for i := 0; i < countDeletes; i++ {
|
||||||
|
var randInd int
|
||||||
|
for {
|
||||||
|
randInd = rand.Intn(countUniq)
|
||||||
|
if !usedIndices[randInd] {
|
||||||
|
usedIndices[randInd] = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
toDelete[i] = uniqueItems[randInd]
|
||||||
|
}
|
||||||
|
|
||||||
return TestData{
|
return TestData{
|
||||||
Items: items,
|
Items: items,
|
||||||
ItemsSorted: itemsSort,
|
ItemsSorted: itemsSort,
|
||||||
Existing: existing,
|
Search: existing,
|
||||||
NonExisting: notExisting,
|
|
||||||
ToDelete: toDelete,
|
ToDelete: toDelete,
|
||||||
|
UniqueItems: uniqueItems,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Тест вставки массива данных (один раз)
|
// Тест вставки массива данных (один раз)
|
||||||
func testOneInsert(structure DataStructure, data []ds.MyData) float64 {
|
func testOnesInsert(structure DataStructure, data []ds.MyData) float64 {
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
|
|
||||||
for _, item := range data {
|
for _, item := range data {
|
||||||
|
|
@ -117,63 +136,121 @@ func testOneInsert(structure DataStructure, data []ds.MyData) float64 {
|
||||||
return time.Since(start).Seconds()
|
return time.Since(start).Seconds()
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestInsert(factory StructureFactory, data []ds.MyData, nameStruct, mode string) {
|
// Тест поиска массива данных (один раз)
|
||||||
BenchRes := make([]csvwriter.BenchmarkResult, 0)
|
func testOnesSearch(structure DataStructure, data []ds.MyData) float64 {
|
||||||
|
start := time.Now()
|
||||||
|
|
||||||
allTestTime := time.Now()
|
for _, item := range data {
|
||||||
averageTime := 0.
|
structure.Search(item.Name)
|
||||||
|
// p, ok := structure.Search(item.Name)
|
||||||
|
// fmt.Println(p, item.Phone, ok)
|
||||||
|
}
|
||||||
|
|
||||||
// Тест Слчайной вставки
|
return time.Since(start).Seconds()
|
||||||
|
}
|
||||||
|
|
||||||
for i := 0; i < countRepeat; i++ {
|
// Тест удаления массива данных (один раз)
|
||||||
head := factory()
|
func testOnesDelete(structure DataStructure, data []ds.MyData) float64 {
|
||||||
|
start := time.Now()
|
||||||
|
|
||||||
resTime := testOneInsert(head, data)
|
for _, item := range data {
|
||||||
|
structure.Delete(item.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
return time.Since(start).Seconds()
|
||||||
|
}
|
||||||
|
|
||||||
|
func testForData(nameStruct, mode string, factory StructureFactory, data_insert, data_search, data_delete []ds.MyData) {
|
||||||
|
BenchRes := make([]csvwriter.BenchmarkResult, 0, countRepeat*3+3) // Массив строк отчёта
|
||||||
|
|
||||||
|
averageTimeInsert := 0.
|
||||||
|
averageTimeSearch := 0.
|
||||||
|
averageTimeDelete := 0.
|
||||||
|
|
||||||
|
for iteration := 0; iteration < countRepeat; iteration++ {
|
||||||
|
|
||||||
|
structure := factory()
|
||||||
|
|
||||||
|
insertTime := testOnesInsert(structure, data_insert)
|
||||||
|
averageTimeInsert += insertTime
|
||||||
|
|
||||||
averageTime += resTime
|
|
||||||
BenchRes = append(BenchRes, csvwriter.BenchmarkResult{
|
BenchRes = append(BenchRes, csvwriter.BenchmarkResult{
|
||||||
Structure: nameStruct,
|
Structure: nameStruct,
|
||||||
Mode: mode,
|
Mode: mode,
|
||||||
Operation: "Вставка",
|
Operation: "Вставка",
|
||||||
Time: resTime,
|
Time: insertTime,
|
||||||
})
|
})
|
||||||
fmt.Printf("%s | Вставка | %s | Время: %f\n", nameStruct, mode, resTime)
|
|
||||||
// fmt.Println(BenchRes)
|
searchTime := testOnesSearch(structure, data_search)
|
||||||
|
averageTimeSearch += searchTime
|
||||||
|
|
||||||
|
BenchRes = append(BenchRes, csvwriter.BenchmarkResult{
|
||||||
|
Structure: nameStruct,
|
||||||
|
Mode: mode,
|
||||||
|
Operation: "Поиск",
|
||||||
|
Time: searchTime,
|
||||||
|
})
|
||||||
|
|
||||||
|
deleteTime := testOnesDelete(structure, data_delete)
|
||||||
|
averageTimeDelete += deleteTime
|
||||||
|
|
||||||
|
BenchRes = append(BenchRes, csvwriter.BenchmarkResult{
|
||||||
|
Structure: nameStruct,
|
||||||
|
Mode: mode,
|
||||||
|
Operation: "Удаление",
|
||||||
|
Time: deleteTime,
|
||||||
|
})
|
||||||
|
fmt.Printf("%s | Вставка | %s | Время: %f\n", nameStruct, mode, insertTime)
|
||||||
|
fmt.Printf("%s | Поиск | %s | Время: %f\n", nameStruct, mode, searchTime)
|
||||||
|
fmt.Printf("%s | Удаление | %s | Время: %.9f\n", nameStruct, mode, deleteTime)
|
||||||
}
|
}
|
||||||
|
|
||||||
averageTime = time.Since(allTestTime).Seconds() / countRepeat
|
averageTimeInsert /= countRepeat
|
||||||
|
averageTimeSearch /= countRepeat
|
||||||
|
averageTimeDelete /= countRepeat
|
||||||
|
|
||||||
BenchRes = append(BenchRes, csvwriter.BenchmarkResult{
|
BenchRes = append(BenchRes, csvwriter.BenchmarkResult{
|
||||||
Structure: nameStruct,
|
Structure: nameStruct,
|
||||||
Mode: mode,
|
Mode: mode,
|
||||||
Operation: "Вставка",
|
Operation: "Вставка (среднее)",
|
||||||
Time: averageTime,
|
Time: averageTimeInsert,
|
||||||
})
|
})
|
||||||
|
BenchRes = append(BenchRes, csvwriter.BenchmarkResult{
|
||||||
|
Structure: nameStruct,
|
||||||
|
Mode: mode,
|
||||||
|
Operation: "Поиск (среднее)",
|
||||||
|
Time: averageTimeSearch,
|
||||||
|
})
|
||||||
|
BenchRes = append(BenchRes, csvwriter.BenchmarkResult{
|
||||||
|
Structure: nameStruct,
|
||||||
|
Mode: mode,
|
||||||
|
Operation: "Удаление (среднее)",
|
||||||
|
Time: averageTimeDelete,
|
||||||
|
})
|
||||||
|
|
||||||
|
fmt.Printf("%s | Вставка | %s | Время (среднее): %f\n", nameStruct, mode, averageTimeInsert)
|
||||||
|
fmt.Printf("%s | Поиск | %s | Время (среднее): %f\n", nameStruct, mode, averageTimeSearch)
|
||||||
|
fmt.Printf("%s | Удаление | %s | Время (среднее): %f\n", nameStruct, mode, averageTimeDelete)
|
||||||
|
|
||||||
csvwriter.AppendRaw(BenchRes)
|
csvwriter.AppendRaw(BenchRes)
|
||||||
}
|
}
|
||||||
|
|
||||||
func Test(nameStruct string, factory StructureFactory, data TestData) {
|
func Test(nameStruct string, factory StructureFactory) {
|
||||||
|
data := GenerateTestData()
|
||||||
|
|
||||||
// BenchRes := make([]csvwriter.BenchmarkResult, 0)
|
testForData(nameStruct, "Случайный", factory, data.Items, data.Search, data.ToDelete)
|
||||||
|
|
||||||
// allTestTime := time.Now()
|
testForData(nameStruct, "Отсортированный", factory, data.ItemsSorted, data.Search, data.ToDelete)
|
||||||
TestInsert(factory, data.Items, nameStruct, "Случайный")
|
|
||||||
TestInsert(factory, data.ItemsSorted, nameStruct, "Отсортированный")
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
testData := GenerateTestData()
|
|
||||||
csvwriter.CreateEmptyCSV("results", "benchmarks.csv")
|
|
||||||
|
|
||||||
// head_ll := &ll.LinkedList{}
|
csvwriter.CreateEmptyCSV("results", "benchmarks.csv")
|
||||||
// head_ht := ht.NewHashTable(256, 0.75)
|
|
||||||
// head_bst := bst.NewBinSearchTree()
|
|
||||||
|
|
||||||
fmt.Println("============= Начало тестов =============")
|
fmt.Println("============= Начало тестов =============")
|
||||||
|
|
||||||
Test("Связный список", NewLinkedList, testData)
|
Test("Связный список", NewLinkedList)
|
||||||
Test("Хеш таблица", NewHashTable, testData)
|
Test("Хеш таблица", NewHashTable)
|
||||||
Test("Бинарное дерево поиска", NewBinSearchTree, testData)
|
Test("Бинарное дерево поиска", NewBinSearchTree)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user