Закончена практика

This commit is contained in:
soldatkinao 2026-05-18 22:11:37 +03:00
parent 67a61da62b
commit 45edc73aa2
2 changed files with 224 additions and 7 deletions

View File

@ -0,0 +1,121 @@
Структура,Порядок,Повторение,Операция,Время (с)
LinkedList,shuffled,1,insert,3.1302744999993593
LinkedList,shuffled,1,find,0.005220100050792098
LinkedList,shuffled,1,delete,0.014845799887552857
LinkedList,shuffled,1,list_all,0.0055240001529455185
LinkedList,shuffled,2,insert,3.9573061999399215
LinkedList,shuffled,2,find,0.005903499899432063
LinkedList,shuffled,2,delete,0.012860000133514404
LinkedList,shuffled,2,list_all,0.005526799941435456
LinkedList,shuffled,3,insert,3.934717500116676
LinkedList,shuffled,3,find,0.005851200083270669
LinkedList,shuffled,3,delete,0.015433399938046932
LinkedList,shuffled,3,list_all,0.005478800041601062
LinkedList,shuffled,4,insert,3.927386400057003
LinkedList,shuffled,4,find,0.005423200083896518
LinkedList,shuffled,4,delete,0.013300799997523427
LinkedList,shuffled,4,list_all,0.005344899836927652
LinkedList,shuffled,5,insert,4.010202700039372
LinkedList,shuffled,5,find,0.006096000084653497
LinkedList,shuffled,5,delete,0.013918899931013584
LinkedList,shuffled,5,list_all,0.006746200146153569
LinkedList,sorted,1,insert,4.09783950005658
LinkedList,sorted,1,find,0.0430095000192523
LinkedList,sorted,1,delete,0.01721159997396171
LinkedList,sorted,1,list_all,0.005465000169351697
LinkedList,sorted,2,insert,4.133864999981597
LinkedList,sorted,2,find,0.0456748001743108
LinkedList,sorted,2,delete,0.016983899986371398
LinkedList,sorted,2,list_all,0.002011100063100457
LinkedList,sorted,3,insert,4.122705399990082
LinkedList,sorted,3,find,0.045870000030845404
LinkedList,sorted,3,delete,0.016401699976995587
LinkedList,sorted,3,list_all,0.005049800034612417
LinkedList,sorted,4,insert,3.772368999896571
LinkedList,sorted,4,find,0.02993709989823401
LinkedList,sorted,4,delete,0.011476899962872267
LinkedList,sorted,4,list_all,0.003602599957957864
LinkedList,sorted,5,insert,3.264690199866891
LinkedList,sorted,5,find,0.02624980011023581
LinkedList,sorted,5,delete,0.01183390012010932
LinkedList,sorted,5,list_all,0.0017556999810039997
HashTable,shuffled,1,insert,0.005876099923625588
HashTable,shuffled,1,find,3.350013867020607e-05
HashTable,shuffled,1,delete,3.0100112780928612e-05
HashTable,shuffled,1,list_all,0.004497800022363663
HashTable,shuffled,2,insert,0.007247900124639273
HashTable,shuffled,2,find,2.9999995604157448e-05
HashTable,shuffled,2,delete,2.95999925583601e-05
HashTable,shuffled,2,list_all,0.00580970011651516
HashTable,shuffled,3,insert,0.004507799865677953
HashTable,shuffled,3,find,2.2900057956576347e-05
HashTable,shuffled,3,delete,1.8700025975704193e-05
HashTable,shuffled,3,list_all,0.003462200053036213
HashTable,shuffled,4,insert,0.005082499934360385
HashTable,shuffled,4,find,3.1800009310245514e-05
HashTable,shuffled,4,delete,2.8799986466765404e-05
HashTable,shuffled,4,list_all,0.007747200084850192
HashTable,shuffled,5,insert,0.004538299981504679
HashTable,shuffled,5,find,2.2900057956576347e-05
HashTable,shuffled,5,delete,1.9300030544400215e-05
HashTable,shuffled,5,list_all,0.003729799995198846
HashTable,sorted,1,insert,0.005079899914562702
HashTable,sorted,1,find,5.079992115497589e-05
HashTable,sorted,1,delete,2.550007775425911e-05
HashTable,sorted,1,list_all,0.005039500072598457
HashTable,sorted,2,insert,0.004276499850675464
HashTable,sorted,2,find,4.079984501004219e-05
HashTable,sorted,2,delete,2.110004425048828e-05
HashTable,sorted,2,list_all,0.004337100079283118
HashTable,sorted,3,insert,0.006273699924349785
HashTable,sorted,3,find,3.9400067180395126e-05
HashTable,sorted,3,delete,1.919991336762905e-05
HashTable,sorted,3,list_all,0.0032929000444710255
HashTable,sorted,4,insert,0.004404899897053838
HashTable,sorted,4,find,4.0499959141016006e-05
HashTable,sorted,4,delete,2.0800158381462097e-05
HashTable,sorted,4,list_all,0.006671200040727854
HashTable,sorted,5,insert,0.00421059993095696
HashTable,sorted,5,find,4.0999846532940865e-05
HashTable,sorted,5,delete,2.140016295015812e-05
HashTable,sorted,5,list_all,0.0034396001137793064
BST,shuffled,1,insert,0.015235899947583675
BST,shuffled,1,find,6.360001862049103e-05
BST,shuffled,1,delete,9.159999899566174e-05
BST,shuffled,1,list_all,0.0042282999493181705
BST,shuffled,2,insert,0.016312200110405684
BST,shuffled,2,find,5.859998054802418e-05
BST,shuffled,2,delete,9.659980423748493e-05
BST,shuffled,2,list_all,0.004191800020635128
BST,shuffled,3,insert,0.015240099979564548
BST,shuffled,3,find,5.859998054802418e-05
BST,shuffled,3,delete,8.849985897541046e-05
BST,shuffled,3,list_all,0.0036266997922211885
BST,shuffled,4,insert,0.014052000129595399
BST,shuffled,4,find,5.9300102293491364e-05
BST,shuffled,4,delete,8.119991980493069e-05
BST,shuffled,4,list_all,0.0027294999454170465
BST,shuffled,5,insert,0.013222299981862307
BST,shuffled,5,find,6.059999577701092e-05
BST,shuffled,5,delete,7.970002479851246e-05
BST,shuffled,5,list_all,0.0028162000235170126
BST,sorted,1,insert,5.109697200125083
BST,sorted,1,find,0.05814290000125766
BST,sorted,1,delete,0.027696199947968125
BST,sorted,1,list_all,0.004435899900272489
BST,sorted,2,insert,6.02595020015724
BST,sorted,2,find,0.05516729992814362
BST,sorted,2,delete,0.028573499992489815
BST,sorted,2,list_all,0.003455700119957328
BST,sorted,3,insert,5.749598399968818
BST,sorted,3,find,0.04719489999115467
BST,sorted,3,delete,0.03186570014804602
BST,sorted,3,list_all,0.002738000126555562
BST,sorted,4,insert,5.19493699981831
BST,sorted,4,find,0.052105900133028626
BST,sorted,4,delete,0.028118600137531757
BST,sorted,4,list_all,0.005104599986225367
BST,sorted,5,insert,5.953492499887943
BST,sorted,5,find,0.060425500152632594
BST,sorted,5,delete,0.024722500005736947
BST,sorted,5,list_all,0.004347699927166104
1 Структура Порядок Повторение Операция Время (с)
2 LinkedList shuffled 1 insert 3.1302744999993593
3 LinkedList shuffled 1 find 0.005220100050792098
4 LinkedList shuffled 1 delete 0.014845799887552857
5 LinkedList shuffled 1 list_all 0.0055240001529455185
6 LinkedList shuffled 2 insert 3.9573061999399215
7 LinkedList shuffled 2 find 0.005903499899432063
8 LinkedList shuffled 2 delete 0.012860000133514404
9 LinkedList shuffled 2 list_all 0.005526799941435456
10 LinkedList shuffled 3 insert 3.934717500116676
11 LinkedList shuffled 3 find 0.005851200083270669
12 LinkedList shuffled 3 delete 0.015433399938046932
13 LinkedList shuffled 3 list_all 0.005478800041601062
14 LinkedList shuffled 4 insert 3.927386400057003
15 LinkedList shuffled 4 find 0.005423200083896518
16 LinkedList shuffled 4 delete 0.013300799997523427
17 LinkedList shuffled 4 list_all 0.005344899836927652
18 LinkedList shuffled 5 insert 4.010202700039372
19 LinkedList shuffled 5 find 0.006096000084653497
20 LinkedList shuffled 5 delete 0.013918899931013584
21 LinkedList shuffled 5 list_all 0.006746200146153569
22 LinkedList sorted 1 insert 4.09783950005658
23 LinkedList sorted 1 find 0.0430095000192523
24 LinkedList sorted 1 delete 0.01721159997396171
25 LinkedList sorted 1 list_all 0.005465000169351697
26 LinkedList sorted 2 insert 4.133864999981597
27 LinkedList sorted 2 find 0.0456748001743108
28 LinkedList sorted 2 delete 0.016983899986371398
29 LinkedList sorted 2 list_all 0.002011100063100457
30 LinkedList sorted 3 insert 4.122705399990082
31 LinkedList sorted 3 find 0.045870000030845404
32 LinkedList sorted 3 delete 0.016401699976995587
33 LinkedList sorted 3 list_all 0.005049800034612417
34 LinkedList sorted 4 insert 3.772368999896571
35 LinkedList sorted 4 find 0.02993709989823401
36 LinkedList sorted 4 delete 0.011476899962872267
37 LinkedList sorted 4 list_all 0.003602599957957864
38 LinkedList sorted 5 insert 3.264690199866891
39 LinkedList sorted 5 find 0.02624980011023581
40 LinkedList sorted 5 delete 0.01183390012010932
41 LinkedList sorted 5 list_all 0.0017556999810039997
42 HashTable shuffled 1 insert 0.005876099923625588
43 HashTable shuffled 1 find 3.350013867020607e-05
44 HashTable shuffled 1 delete 3.0100112780928612e-05
45 HashTable shuffled 1 list_all 0.004497800022363663
46 HashTable shuffled 2 insert 0.007247900124639273
47 HashTable shuffled 2 find 2.9999995604157448e-05
48 HashTable shuffled 2 delete 2.95999925583601e-05
49 HashTable shuffled 2 list_all 0.00580970011651516
50 HashTable shuffled 3 insert 0.004507799865677953
51 HashTable shuffled 3 find 2.2900057956576347e-05
52 HashTable shuffled 3 delete 1.8700025975704193e-05
53 HashTable shuffled 3 list_all 0.003462200053036213
54 HashTable shuffled 4 insert 0.005082499934360385
55 HashTable shuffled 4 find 3.1800009310245514e-05
56 HashTable shuffled 4 delete 2.8799986466765404e-05
57 HashTable shuffled 4 list_all 0.007747200084850192
58 HashTable shuffled 5 insert 0.004538299981504679
59 HashTable shuffled 5 find 2.2900057956576347e-05
60 HashTable shuffled 5 delete 1.9300030544400215e-05
61 HashTable shuffled 5 list_all 0.003729799995198846
62 HashTable sorted 1 insert 0.005079899914562702
63 HashTable sorted 1 find 5.079992115497589e-05
64 HashTable sorted 1 delete 2.550007775425911e-05
65 HashTable sorted 1 list_all 0.005039500072598457
66 HashTable sorted 2 insert 0.004276499850675464
67 HashTable sorted 2 find 4.079984501004219e-05
68 HashTable sorted 2 delete 2.110004425048828e-05
69 HashTable sorted 2 list_all 0.004337100079283118
70 HashTable sorted 3 insert 0.006273699924349785
71 HashTable sorted 3 find 3.9400067180395126e-05
72 HashTable sorted 3 delete 1.919991336762905e-05
73 HashTable sorted 3 list_all 0.0032929000444710255
74 HashTable sorted 4 insert 0.004404899897053838
75 HashTable sorted 4 find 4.0499959141016006e-05
76 HashTable sorted 4 delete 2.0800158381462097e-05
77 HashTable sorted 4 list_all 0.006671200040727854
78 HashTable sorted 5 insert 0.00421059993095696
79 HashTable sorted 5 find 4.0999846532940865e-05
80 HashTable sorted 5 delete 2.140016295015812e-05
81 HashTable sorted 5 list_all 0.0034396001137793064
82 BST shuffled 1 insert 0.015235899947583675
83 BST shuffled 1 find 6.360001862049103e-05
84 BST shuffled 1 delete 9.159999899566174e-05
85 BST shuffled 1 list_all 0.0042282999493181705
86 BST shuffled 2 insert 0.016312200110405684
87 BST shuffled 2 find 5.859998054802418e-05
88 BST shuffled 2 delete 9.659980423748493e-05
89 BST shuffled 2 list_all 0.004191800020635128
90 BST shuffled 3 insert 0.015240099979564548
91 BST shuffled 3 find 5.859998054802418e-05
92 BST shuffled 3 delete 8.849985897541046e-05
93 BST shuffled 3 list_all 0.0036266997922211885
94 BST shuffled 4 insert 0.014052000129595399
95 BST shuffled 4 find 5.9300102293491364e-05
96 BST shuffled 4 delete 8.119991980493069e-05
97 BST shuffled 4 list_all 0.0027294999454170465
98 BST shuffled 5 insert 0.013222299981862307
99 BST shuffled 5 find 6.059999577701092e-05
100 BST shuffled 5 delete 7.970002479851246e-05
101 BST shuffled 5 list_all 0.0028162000235170126
102 BST sorted 1 insert 5.109697200125083
103 BST sorted 1 find 0.05814290000125766
104 BST sorted 1 delete 0.027696199947968125
105 BST sorted 1 list_all 0.004435899900272489
106 BST sorted 2 insert 6.02595020015724
107 BST sorted 2 find 0.05516729992814362
108 BST sorted 2 delete 0.028573499992489815
109 BST sorted 2 list_all 0.003455700119957328
110 BST sorted 3 insert 5.749598399968818
111 BST sorted 3 find 0.04719489999115467
112 BST sorted 3 delete 0.03186570014804602
113 BST sorted 3 list_all 0.002738000126555562
114 BST sorted 4 insert 5.19493699981831
115 BST sorted 4 find 0.052105900133028626
116 BST sorted 4 delete 0.028118600137531757
117 BST sorted 4 list_all 0.005104599986225367
118 BST sorted 5 insert 5.953492499887943
119 BST sorted 5 find 0.060425500152632594
120 BST sorted 5 delete 0.024722500005736947
121 BST sorted 5 list_all 0.004347699927166104

View File

@ -76,6 +76,99 @@ def ht_list_all(buckets):
rec.sort(key=lambda x: x[0]) rec.sort(key=lambda x: x[0])
return rec return rec
def bst_insert(root, name, phone):
new = {'name': name, 'phone': phone, 'left': None, 'right': None}
if root is None:
return new
cur = root
while True:
if name < cur['name']:
if cur['left'] is None:
cur['left'] = new
break
cur = cur['left']
elif name > cur['name']:
if cur['right'] is None:
cur['right'] = new
break
cur = cur['right']
else:
cur['phone'] = phone
break
return root
def bst_find(root, name):
cur = root
while cur:
if name == cur['name']:
return cur['phone']
elif name < cur['name']:
cur = cur['left']
else:
cur = cur['right']
return None
def bst_delete(root, name):
if root is None:
return None
parent = None
cur = root
while cur and cur['name'] != name:
parent = cur
if name < cur['name']:
cur = cur['left']
else:
cur = cur['right']
if cur is None:
return root
# нет детей
if cur['left'] is None and cur['right'] is None:
if parent is None:
return None
if parent['left'] is cur:
parent['left'] = None
else:
parent['right'] = None
return root
# один ребёнок
if cur['left'] is None:
child = cur['right']
elif cur['right'] is None:
child = cur['left']
else:
# два ребёнка ищем минимальный в правом поддереве
succ_parent = cur
succ = cur['right']
while succ['left']:
succ_parent = succ
succ = succ['left']
cur['name'], cur['phone'] = succ['name'], succ['phone']
if succ_parent['left'] is succ:
succ_parent['left'] = succ['right']
else:
succ_parent['right'] = succ['right']
return root
if parent is None:
return child
if parent['left'] is cur:
parent['left'] = child
else:
parent['right'] = child
return root
def bst_list_all(root):
res = []
stack = []
cur = root
while stack or cur:
while cur:
stack.append(cur)
cur = cur['left']
cur = stack.pop()
res.append((cur['name'], cur['phone']))
cur = cur['right']
return res
def gen_data(N=10000): def gen_data(N=10000):
data = [] data = []
for i in range(N): for i in range(N):
@ -90,10 +183,6 @@ def gen_data(N=10000):
# 5 повторений сохраняем все замеры # 5 повторений сохраняем все замеры
def run_test(init_func, ins_func, find_func, del_func, list_func, def run_test(init_func, ins_func, find_func, del_func, list_func,
shuffled, sorted_data, exist_names, missing_names, del_names): shuffled, sorted_data, exist_names, missing_names, del_names):
"""
Возвращает список строк для CSV:
[порядок, повторение, операция, время]
"""
rows = [] rows = []
for order, dataset in [('shuffled', shuffled), ('sorted', sorted_data)]: for order, dataset in [('shuffled', shuffled), ('sorted', sorted_data)]:
for rep in range(5): for rep in range(5):
@ -149,7 +238,14 @@ if __name__ == '__main__':
for r in rows: for r in rows:
all_rows.append(['HashTable'] + r) all_rows.append(['HashTable'] + r)
# Запись в CSV # бинарное дерево
print("Бинарное дерево...")
rows = run_test(lambda: None, bst_insert, bst_find, bst_delete, bst_list_all,
shuffled, sorted_data, exist_names, missing_names, del_names)
for r in rows:
all_rows.append(['BST'] + r)
# запись в CSV
with open('results.csv', 'w', newline='', encoding='utf-8') as f: with open('results.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f) writer = csv.writer(f)
writer.writerow(['Структура', 'Порядок', 'Повторение', 'Операция', 'Время (с)']) writer.writerow(['Структура', 'Порядок', 'Повторение', 'Операция', 'Время (с)'])
@ -164,7 +260,7 @@ if __name__ == '__main__':
avg[(struct, order, op)].append(t) avg[(struct, order, op)].append(t)
print("\nСредние значения (5 запусков):") print("\nСредние значения (5 запусков):")
print(f"{'Структура':<12} {'Порядок':<10} {'Вставка':>10} {'Поиск':>10} {'Удаление':>10} {'ListAll':>10}") print(f"{'Структура':<12} {'Порядок':<10} {'Вставка':>10} {'Поиск':>10} {'Удаление':>10} {'ListAll':>10}")
for struct in ['LinkedList', 'HashTable']: for struct in ['LinkedList', 'HashTable', 'BST']:
for order in ['shuffled', 'sorted']: for order in ['shuffled', 'sorted']:
row = [struct, order] row = [struct, order]
for op in ['insert', 'find', 'delete', 'list_all']: for op in ['insert', 'find', 'delete', 'list_all']:
@ -172,4 +268,4 @@ if __name__ == '__main__':
avg_val = sum(vals)/len(vals) avg_val = sum(vals)/len(vals)
row.append(f"{avg_val:.5f}") row.append(f"{avg_val:.5f}")
print(f"{row[0]:<12} {row[1]:<10} {row[2]:>10} {row[3]:>10} {row[4]:>10} {row[5]:>10}") print(f"{row[0]:<12} {row[1]:<10} {row[2]:>10} {row[3]:>10} {row[4]:>10} {row[5]:>10}")
print("\nГотово (ну почти))).") print("\nГотово!!!!!.")