forked from UNN/2026-rff_mp
[1] add timing tests and results
This commit is contained in:
parent
d4fcd67dde
commit
6ea13ecb26
109
raskatovia/docs/data/task1/results.csv
Normal file
109
raskatovia/docs/data/task1/results.csv
Normal file
|
|
@ -0,0 +1,109 @@
|
||||||
|
Структура,Режим,Операция,Замер,Время (сек)
|
||||||
|
Связный список,Случайный,Вставка,1,18.650031568482518
|
||||||
|
Связный список,Случайный,Вставка,2,18.696410017088056
|
||||||
|
Связный список,Случайный,Вставка,3,17.576973121613264
|
||||||
|
Связный список,Случайный,Вставка,4,16.589464861899614
|
||||||
|
Связный список,Случайный,Вставка,5,16.205514946952462
|
||||||
|
Связный список,Случайный,Вставка,Среднее,17.543678903207184
|
||||||
|
Связный список,Случайный,Поиск,1,0.15266339667141438
|
||||||
|
Связный список,Случайный,Поиск,2,0.16375628858804703
|
||||||
|
Связный список,Случайный,Поиск,3,0.12933312729001045
|
||||||
|
Связный список,Случайный,Поиск,4,0.13891681656241417
|
||||||
|
Связный список,Случайный,Поиск,5,0.14089339599013329
|
||||||
|
Связный список,Случайный,Поиск,Среднее,0.14511260502040385
|
||||||
|
Связный список,Случайный,Удаление,1,0.07620067708194256
|
||||||
|
Связный список,Случайный,Удаление,2,0.09449147805571556
|
||||||
|
Связный список,Случайный,Удаление,3,0.08359903283417225
|
||||||
|
Связный список,Случайный,Удаление,4,0.09074903465807438
|
||||||
|
Связный список,Случайный,Удаление,5,0.08376427739858627
|
||||||
|
Связный список,Случайный,Удаление,Среднее,0.0857609000056982
|
||||||
|
Связный список,Отсортированный,Вставка,1,15.179195748642087
|
||||||
|
Связный список,Отсортированный,Вставка,2,15.626798518002033
|
||||||
|
Связный список,Отсортированный,Вставка,3,15.150643169879913
|
||||||
|
Связный список,Отсортированный,Вставка,4,14.520009176805615
|
||||||
|
Связный список,Отсортированный,Вставка,5,14.595012564212084
|
||||||
|
Связный список,Отсортированный,Вставка,Среднее,15.014331835508347
|
||||||
|
Связный список,Отсортированный,Поиск,1,0.11738761514425278
|
||||||
|
Связный список,Отсортированный,Поиск,2,0.1201033927500248
|
||||||
|
Связный список,Отсортированный,Поиск,3,0.1553904190659523
|
||||||
|
Связный список,Отсортированный,Поиск,4,0.12524455040693283
|
||||||
|
Связный список,Отсортированный,Поиск,5,0.11648610420525074
|
||||||
|
Связный список,Отсортированный,Поиск,Среднее,0.1269224163144827
|
||||||
|
Связный список,Отсортированный,Удаление,1,0.08444823324680328
|
||||||
|
Связный список,Отсортированный,Удаление,2,0.0750405415892601
|
||||||
|
Связный список,Отсортированный,Удаление,3,0.0696138758212328
|
||||||
|
Связный список,Отсортированный,Удаление,4,0.07685920968651772
|
||||||
|
Связный список,Отсортированный,Удаление,5,0.06544658727943897
|
||||||
|
Связный список,Отсортированный,Удаление,Среднее,0.07428168952465057
|
||||||
|
Хеш-таблица,Случайный,Вставка,1,0.8925542905926704
|
||||||
|
Хеш-таблица,Случайный,Вставка,2,0.9055562932044268
|
||||||
|
Хеш-таблица,Случайный,Вставка,3,0.9032609593123198
|
||||||
|
Хеш-таблица,Случайный,Вставка,4,0.8939349129796028
|
||||||
|
Хеш-таблица,Случайный,Вставка,5,0.8801330886781216
|
||||||
|
Хеш-таблица,Случайный,Вставка,Среднее,0.8950879089534283
|
||||||
|
Хеш-таблица,Случайный,Поиск,1,0.007984047755599022
|
||||||
|
Хеш-таблица,Случайный,Поиск,2,0.007909735664725304
|
||||||
|
Хеш-таблица,Случайный,Поиск,3,0.007135823369026184
|
||||||
|
Хеш-таблица,Случайный,Поиск,4,0.007862800732254982
|
||||||
|
Хеш-таблица,Случайный,Поиск,5,0.00866653397679329
|
||||||
|
Хеш-таблица,Случайный,Поиск,Среднее,0.007911788299679756
|
||||||
|
Хеш-таблица,Случайный,Удаление,1,0.005503913387656212
|
||||||
|
Хеш-таблица,Случайный,Удаление,2,0.005658401176333427
|
||||||
|
Хеш-таблица,Случайный,Удаление,3,0.00445329025387764
|
||||||
|
Хеш-таблица,Случайный,Удаление,4,0.005032133311033249
|
||||||
|
Хеш-таблица,Случайный,Удаление,5,0.00463026762008667
|
||||||
|
Хеш-таблица,Случайный,Удаление,Среднее,0.00505560114979744
|
||||||
|
Хеш-таблица,Отсортированный,Вставка,1,0.8290290385484695
|
||||||
|
Хеш-таблица,Отсортированный,Вставка,2,0.8197460155934095
|
||||||
|
Хеш-таблица,Отсортированный,Вставка,3,0.8217651266604662
|
||||||
|
Хеш-таблица,Отсортированный,Вставка,4,0.8248847275972366
|
||||||
|
Хеш-таблица,Отсортированный,Вставка,5,0.8270500153303146
|
||||||
|
Хеш-таблица,Отсортированный,Вставка,Среднее,0.8244949847459793
|
||||||
|
Хеш-таблица,Отсортированный,Поиск,1,0.008095510303974152
|
||||||
|
Хеш-таблица,Отсортированный,Поиск,2,0.007643779739737511
|
||||||
|
Хеш-таблица,Отсортированный,Поиск,3,0.007320135831832886
|
||||||
|
Хеш-таблица,Отсортированный,Поиск,4,0.007490267977118492
|
||||||
|
Хеш-таблица,Отсортированный,Поиск,5,0.0073973797261714935
|
||||||
|
Хеш-таблица,Отсортированный,Поиск,Среднее,0.007589414715766907
|
||||||
|
Хеш-таблица,Отсортированный,Удаление,1,0.0041198693215847015
|
||||||
|
Хеш-таблица,Отсортированный,Удаление,2,0.005096178501844406
|
||||||
|
Хеш-таблица,Отсортированный,Удаление,3,0.0038871560245752335
|
||||||
|
Хеш-таблица,Отсортированный,Удаление,4,0.004979334771633148
|
||||||
|
Хеш-таблица,Отсортированный,Удаление,5,0.005531288683414459
|
||||||
|
Хеш-таблица,Отсортированный,Удаление,Среднее,0.0047227654606103895
|
||||||
|
BST,Случайный,Вставка,1,0.061682142317295074
|
||||||
|
BST,Случайный,Вставка,2,0.06325294077396393
|
||||||
|
BST,Случайный,Вставка,3,0.06278556399047375
|
||||||
|
BST,Случайный,Вставка,4,0.06266334094107151
|
||||||
|
BST,Случайный,Вставка,5,0.0640009418129921
|
||||||
|
BST,Случайный,Вставка,Среднее,0.06287698596715927
|
||||||
|
BST,Случайный,Поиск,1,0.0005436446517705917
|
||||||
|
BST,Случайный,Поиск,2,0.0005729794502258301
|
||||||
|
BST,Случайный,Поиск,3,0.0005832426249980927
|
||||||
|
BST,Случайный,Поиск,4,0.0005539115518331528
|
||||||
|
BST,Случайный,Поиск,5,0.0005719996988773346
|
||||||
|
BST,Случайный,Поиск,Среднее,0.0005651555955410003
|
||||||
|
BST,Случайный,Удаление,1,0.00034173205494880676
|
||||||
|
BST,Случайный,Удаление,2,0.00031582266092300415
|
||||||
|
BST,Случайный,Удаление,3,0.000333910807967186
|
||||||
|
BST,Случайный,Удаление,4,0.00034319981932640076
|
||||||
|
BST,Случайный,Удаление,5,0.000340266153216362
|
||||||
|
BST,Случайный,Удаление,Среднее,0.0003349862992763519
|
||||||
|
BST,Отсортированный,Вставка,1,23.19616787880659
|
||||||
|
BST,Отсортированный,Вставка,2,22.920896999537945
|
||||||
|
BST,Отсортированный,Вставка,3,22.561782151460648
|
||||||
|
BST,Отсортированный,Вставка,4,22.217343267053366
|
||||||
|
BST,Отсортированный,Вставка,5,24.517986714839935
|
||||||
|
BST,Отсортированный,Вставка,Среднее,23.082835402339697
|
||||||
|
BST,Отсортированный,Поиск,1,0.1749225128442049
|
||||||
|
BST,Отсортированный,Поиск,2,0.15511077642440796
|
||||||
|
BST,Отсортированный,Поиск,3,0.15050886385142803
|
||||||
|
BST,Отсортированный,Поиск,4,0.17243162170052528
|
||||||
|
BST,Отсортированный,Поиск,5,0.19662086851894855
|
||||||
|
BST,Отсортированный,Поиск,Среднее,0.16991892866790295
|
||||||
|
BST,Отсортированный,Удаление,1,0.09117730148136616
|
||||||
|
BST,Отсортированный,Удаление,2,0.09206805564463139
|
||||||
|
BST,Отсортированный,Удаление,3,0.09830334596335888
|
||||||
|
BST,Отсортированный,Удаление,4,0.08749254420399666
|
||||||
|
BST,Отсортированный,Удаление,5,0.11593561433255672
|
||||||
|
BST,Отсортированный,Удаление,Среднее,0.09699537232518196
|
||||||
|
141
raskatovia/docs/data/task1/zamery.py
Normal file
141
raskatovia/docs/data/task1/zamery.py
Normal file
|
|
@ -0,0 +1,141 @@
|
||||||
|
import csv
|
||||||
|
import random
|
||||||
|
import time
|
||||||
|
from spravochnik import *
|
||||||
|
|
||||||
|
COUNT = 10000
|
||||||
|
REPEATS = 5
|
||||||
|
|
||||||
|
def make_records():
|
||||||
|
records = []
|
||||||
|
for i in range(COUNT):
|
||||||
|
name = f"User_{i:05d}"
|
||||||
|
phone = str(89000000000 + i)
|
||||||
|
records.append((name, phone))
|
||||||
|
shuffled = records[:]
|
||||||
|
random.shuffle(shuffled)
|
||||||
|
ordered = sorted(records, key=lambda item: item[0])
|
||||||
|
return shuffled, ordered
|
||||||
|
|
||||||
|
def make_search_names(records):
|
||||||
|
existing = [item[0] for item in random.sample(records, 100)]
|
||||||
|
missing = [f"None_{i}" for i in range(10)]
|
||||||
|
return existing + missing
|
||||||
|
|
||||||
|
def make_delete_names(records):
|
||||||
|
return [item[0] for item in random.sample(records, 50)]
|
||||||
|
|
||||||
|
def average(values):
|
||||||
|
return sum(values) / len(values)
|
||||||
|
|
||||||
|
def test_list(records):
|
||||||
|
insert_times = []
|
||||||
|
find_times = []
|
||||||
|
delete_times = []
|
||||||
|
for _ in range(REPEATS):
|
||||||
|
head = None
|
||||||
|
start = time.perf_counter()
|
||||||
|
for name, phone in records:
|
||||||
|
head = ll_insert(head, name, phone)
|
||||||
|
insert_times.append(time.perf_counter() - start)
|
||||||
|
|
||||||
|
search_names = make_search_names(records)
|
||||||
|
start = time.perf_counter()
|
||||||
|
for name in search_names:
|
||||||
|
ll_find(head, name)
|
||||||
|
find_times.append(time.perf_counter() - start)
|
||||||
|
|
||||||
|
delete_names = make_delete_names(records)
|
||||||
|
start = time.perf_counter()
|
||||||
|
for name in delete_names:
|
||||||
|
head = ll_delete(head, name)
|
||||||
|
delete_times.append(time.perf_counter() - start)
|
||||||
|
|
||||||
|
return insert_times, find_times, delete_times
|
||||||
|
|
||||||
|
def test_hash(records):
|
||||||
|
insert_times = []
|
||||||
|
find_times = []
|
||||||
|
delete_times = []
|
||||||
|
for _ in range(REPEATS):
|
||||||
|
table = ht_create()
|
||||||
|
start = time.perf_counter()
|
||||||
|
for name, phone in records:
|
||||||
|
ht_insert(table, name, phone)
|
||||||
|
insert_times.append(time.perf_counter() - start)
|
||||||
|
|
||||||
|
search_names = make_search_names(records)
|
||||||
|
start = time.perf_counter()
|
||||||
|
for name in search_names:
|
||||||
|
ht_find(table, name)
|
||||||
|
find_times.append(time.perf_counter() - start)
|
||||||
|
|
||||||
|
delete_names = make_delete_names(records)
|
||||||
|
start = time.perf_counter()
|
||||||
|
for name in delete_names:
|
||||||
|
ht_delete(table, name)
|
||||||
|
delete_times.append(time.perf_counter() - start)
|
||||||
|
|
||||||
|
return insert_times, find_times, delete_times
|
||||||
|
|
||||||
|
def test_bst(records):
|
||||||
|
insert_times = []
|
||||||
|
find_times = []
|
||||||
|
delete_times = []
|
||||||
|
for _ in range(REPEATS):
|
||||||
|
root = None
|
||||||
|
start = time.perf_counter()
|
||||||
|
for name, phone in records:
|
||||||
|
root = bst_insert(root, name, phone)
|
||||||
|
insert_times.append(time.perf_counter() - start)
|
||||||
|
|
||||||
|
search_names = make_search_names(records)
|
||||||
|
start = time.perf_counter()
|
||||||
|
for name in search_names:
|
||||||
|
bst_find(root, name)
|
||||||
|
find_times.append(time.perf_counter() - start)
|
||||||
|
|
||||||
|
delete_names = make_delete_names(records)
|
||||||
|
start = time.perf_counter()
|
||||||
|
for name in delete_names:
|
||||||
|
root = bst_delete(root, name)
|
||||||
|
delete_times.append(time.perf_counter() - start)
|
||||||
|
|
||||||
|
return insert_times, find_times, delete_times
|
||||||
|
|
||||||
|
def add_rows(rows, structure, mode, result):
|
||||||
|
names = ["Вставка", "Поиск", "Удаление"]
|
||||||
|
for operation, times in zip(names, result):
|
||||||
|
for number, value in enumerate(times, 1):
|
||||||
|
rows.append([structure, mode, operation, number, value])
|
||||||
|
rows.append([structure, mode, operation, "Среднее", average(times)])
|
||||||
|
|
||||||
|
def main():
|
||||||
|
shuffled, ordered = make_records()
|
||||||
|
rows = [["Структура", "Режим", "Операция", "Замер", "Время (сек)"]]
|
||||||
|
|
||||||
|
print("Связный список, случайный порядок")
|
||||||
|
add_rows(rows, "Связный список", "Случайный", test_list(shuffled))
|
||||||
|
|
||||||
|
print("Связный список, отсортированный порядок")
|
||||||
|
add_rows(rows, "Связный список", "Отсортированный", test_list(ordered))
|
||||||
|
|
||||||
|
print("Хеш-таблица, случайный порядок")
|
||||||
|
add_rows(rows, "Хеш-таблица", "Случайный", test_hash(shuffled))
|
||||||
|
|
||||||
|
print("Хеш-таблица, отсортированный порядок")
|
||||||
|
add_rows(rows, "Хеш-таблица", "Отсортированный", test_hash(ordered))
|
||||||
|
|
||||||
|
print("BST, случайный порядок")
|
||||||
|
add_rows(rows, "BST", "Случайный", test_bst(shuffled))
|
||||||
|
|
||||||
|
print("BST, отсортированный порядок")
|
||||||
|
add_rows(rows, "BST", "Отсортированный", test_bst(ordered))
|
||||||
|
|
||||||
|
with open("raskatovia/docs/data/task1/results.csv", "w", newline="", encoding="utf-8") as file:
|
||||||
|
writer = csv.writer(file)
|
||||||
|
writer.writerows(rows)
|
||||||
|
|
||||||
|
print("Результаты сохранены в results.csv")
|
||||||
|
|
||||||
|
main()
|
||||||
Loading…
Reference in New Issue
Block a user