[1,2] lab1, lab2 #273
121
soldatkinao/lab1/results.csv
Normal file
121
soldatkinao/lab1/results.csv
Normal 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
|
||||
|
|
|
@ -76,6 +76,99 @@ def ht_list_all(buckets):
|
|||
rec.sort(key=lambda x: x[0])
|
||||
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):
|
||||
data = []
|
||||
for i in range(N):
|
||||
|
|
@ -90,10 +183,6 @@ def gen_data(N=10000):
|
|||
# 5 повторений сохраняем все замеры
|
||||
def run_test(init_func, ins_func, find_func, del_func, list_func,
|
||||
shuffled, sorted_data, exist_names, missing_names, del_names):
|
||||
"""
|
||||
Возвращает список строк для CSV:
|
||||
[порядок, повторение, операция, время]
|
||||
"""
|
||||
rows = []
|
||||
for order, dataset in [('shuffled', shuffled), ('sorted', sorted_data)]:
|
||||
for rep in range(5):
|
||||
|
|
@ -149,7 +238,14 @@ if __name__ == '__main__':
|
|||
for r in rows:
|
||||
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:
|
||||
writer = csv.writer(f)
|
||||
writer.writerow(['Структура', 'Порядок', 'Повторение', 'Операция', 'Время (с)'])
|
||||
|
|
@ -164,7 +260,7 @@ if __name__ == '__main__':
|
|||
avg[(struct, order, op)].append(t)
|
||||
print("\nСредние значения (5 запусков):")
|
||||
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']:
|
||||
row = [struct, order]
|
||||
for op in ['insert', 'find', 'delete', 'list_all']:
|
||||
|
|
@ -172,4 +268,4 @@ if __name__ == '__main__':
|
|||
avg_val = sum(vals)/len(vals)
|
||||
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("\nГотово (ну почти))).")
|
||||
print("\nГотово!!!!!.")
|
||||
Loading…
Reference in New Issue
Block a user