Исправлены ошибки программы тестирования, проведены завмеры

This commit is contained in:
Proninvv 2026-03-20 21:38:43 +03:00
parent edea3cf379
commit ffb0de63df
6 changed files with 102 additions and 48 deletions

View File

@ -106,16 +106,6 @@ def sorten(arr):
arr[j], arr[j + 1] = arr[j + 1], arr[j]
# -----------------------------------------------------------
# linklist = None
# linklist = ll_insert(linklist, 'Sjora', '123')
# linklist = ll_insert(linklist, 'Vlad', '0000')
# linklist = ll_insert(linklist, 'Dima', '228')
# print(linklist)
# print(ll_find(linklist, 'Vlad'))
# print(ll_delete(linklist, 'Dima'))
# print(ll_list_all(linklist))
# HashTable (Хранится как список buckets фиксированной длины, каждый элемент — голова связного списка (или None))
def hash_table(size):
@ -172,12 +162,6 @@ def ht_list_all(buckets):
sorten(full_data)
return full_data
# Hash_table1 = hash_table(3)
# ht_insert(Hash_table1, 'Vlad', '000')
# ht_insert(Hash_table1, 'Dima', '111')
# ht_insert(Hash_table1, 'Sjora', '222')
# print(ht_list_all(Hash_table1))
# Двоичное дерево поиска : Узел — словарь: {'name': 'Имя', 'phone': '123', 'left': None, 'right': None}
@ -233,23 +217,26 @@ def bst_delete(root, name):
# стоим в нужном узле
else:
# если у узла нет наследников
if root['left'] is None and root['right'] is None:
# обрываем связь
return None
# если только один наследник
elif root['left'] is None != root['right'] is None:
return root['left'] or root['right']
# узла слева нет (вернет правого ребенка или None)
if root['left'] is None:
return root['right']
# узла справа нет (вернет левого ребенка)
if root['right'] is None:
return root['left']
# два наследника (поиск минимального поддерева в правой ветке)
successor = root['right']
while successor['left'] is not None:
successor = root['left']
successor = successor['left']
root['name'] = successor['name']
root['phone'] = successor['phone']
# Удаляем дубликат преемника в правом поддереве
root['right'] = bst_delete(root['right'], successor['name'])
return root
@ -263,13 +250,3 @@ def bst_list_all(root, result=None):
result.append((root['name'], root['phone']))
bst_list_all(root['right'], result)
return result
# derevo = None
# derevo = bst_insert(derevo, 'Vlad', '000')
# derevo = bst_insert(derevo, 'Dima', '111')
# derevo = bst_insert(derevo, 'Sjora', '222')
# derevo = bst_insert(derevo, 'weid', '0')
# # print(derevo)
# # derevo = bst_delete(derevo, 'Vlad')
# print(bst_list_all(derevo))

View File

@ -24,19 +24,19 @@ def create_data(n=100):
phone = phone_number_generate()
records_sorted.append((name, phone))
records_shuffled = records_sorted
records_shuffled = records_sorted[:]
random.shuffle(records_shuffled)
return records_sorted, records_shuffled
def run_expirement(epoch=1, elements=100):
def run_expirement(epoch=1, elements=1000):
""" распределяем данные по трем структурам данных
тестируем время операций (вставки, удаления, перебора) и записываем полученные результаты в файл """
# создаем данные
records_sorted, records_shuffled = create_data(100)
records_sorted, records_shuffled = create_data(elements)
datasets = [
("shuffled", records_shuffled),
@ -47,13 +47,14 @@ def run_expirement(epoch=1, elements=100):
header = ["Структура", "Режим", "Операция", "Время (сек)"]
results = [header]
linklist = None
hashtab = hash_table(elements)
bintree = None
# сразу будем обрабатывать и случайны и отсортированный данные
for label, arr in datasets:
linklist = None
hashtab = hash_table(elements)
bintree = None
# заполнение связного списка
start = time.perf_counter()
for p in arr:
@ -75,15 +76,15 @@ def run_expirement(epoch=1, elements=100):
# удаление 50 имен в св писке
deldata = random.sample(arr, 50)
start = time.perf_counter()
for p in arr:
for p in deldata:
ll_delete(linklist, p[0])
end = time.perf_counter()
results.append(["linklist", label, "delete", end-start])
# заполнение хэш-тфблицы
start = time.perf_counter()
for p in records_shuffled:
hashtab = ht_insert(hashtab, p[0], p[1])
for p in arr:
ht_insert(hashtab, p[0], p[1])
end = time.perf_counter()
results.append(["hashtable", label, "insert", end-start])
@ -101,14 +102,14 @@ def run_expirement(epoch=1, elements=100):
# удаление 50 имен в хэш таблице
deldata = random.sample(arr, 50)
start = time.perf_counter()
for p in arr:
for p in deldata:
ht_delete(hashtab, p[0])
end = time.perf_counter()
results.append(["hashtable", label, "delete", end-start])
# заполнение дерева
start = time.perf_counter()
for p in records_shuffled:
for p in arr:
bintree = bst_insert(bintree, p[0], p[1])
end = time.perf_counter()
results.append(["bintree", label, "insert", end-start])
@ -127,16 +128,16 @@ def run_expirement(epoch=1, elements=100):
# удаление 50 имен в дереве
deldata = random.sample(arr, 50)
start = time.perf_counter()
for p in arr:
for p in deldata:
bst_delete(bintree, p[0])
end = time.perf_counter()
results.append(["bintree", label, "delete", end-start])
with open('timedata.csv', mode='w', encoding='utf-8', newline='') as file:
with open(f"timedata_{elements}.csv", mode='w', encoding='utf-8', newline='') as file:
writer = csv.writer(file)
writer.writerows(results)
run_expirement(1)
run_expirement(epoch=1, elements=10000)

View File

@ -0,0 +1,19 @@
Структура,Режим,Операция,Время (сек)
linklist,shuffled,insert,0.028301300000748597
linklist,shuffled,find,0.002832099999068305
linklist,shuffled,delete,0.0018718999999691732
hashtable,shuffled,insert,0.0022233999989111908
hashtable,shuffled,find,0.00019609999799286015
hashtable,shuffled,delete,9.929999941959977e-05
bintree,shuffled,insert,0.002081000002362998
bintree,shuffled,find,0.00014569999984814785
bintree,shuffled,delete,7.760000153211877e-05
linklist,sorted,insert,0.02792069999850355
linklist,sorted,find,0.0024707999982638285
linklist,sorted,delete,0.001741200001561083
hashtable,sorted,insert,0.002176499998313375
hashtable,sorted,find,0.00019439999960013665
hashtable,sorted,delete,0.00011420000009820797
bintree,sorted,insert,0.12917839999863645
bintree,sorted,find,0.007965299999341369
bintree,sorted,delete,0.00476150000031339
1 Структура Режим Операция Время (сек)
2 linklist shuffled insert 0.028301300000748597
3 linklist shuffled find 0.002832099999068305
4 linklist shuffled delete 0.0018718999999691732
5 hashtable shuffled insert 0.0022233999989111908
6 hashtable shuffled find 0.00019609999799286015
7 hashtable shuffled delete 9.929999941959977e-05
8 bintree shuffled insert 0.002081000002362998
9 bintree shuffled find 0.00014569999984814785
10 bintree shuffled delete 7.760000153211877e-05
11 linklist sorted insert 0.02792069999850355
12 linklist sorted find 0.0024707999982638285
13 linklist sorted delete 0.001741200001561083
14 hashtable sorted insert 0.002176499998313375
15 hashtable sorted find 0.00019439999960013665
16 hashtable sorted delete 0.00011420000009820797
17 bintree sorted insert 0.12917839999863645
18 bintree sorted find 0.007965299999341369
19 bintree sorted delete 0.00476150000031339

View File

@ -0,0 +1,19 @@
Структура,Режим,Операция,Время (сек)
linklist,shuffled,insert,2.8069403000008606
linklist,shuffled,find,0.028815499998017913
linklist,shuffled,delete,0.015906399999948917
hashtable,shuffled,insert,0.17993940000087605
hashtable,shuffled,find,0.0018954999977722764
hashtable,shuffled,delete,0.0012972000004083384
bintree,shuffled,insert,0.03314669999963371
bintree,shuffled,find,0.00022189999799593352
bintree,shuffled,delete,0.00011869999798364006
linklist,sorted,insert,2.925224900001922
linklist,sorted,find,0.026056099999550497
linklist,sorted,delete,0.015979499999957625
hashtable,sorted,insert,0.15593369999987772
hashtable,sorted,find,0.0014122000029601622
hashtable,sorted,delete,0.0008025000024645124
bintree,sorted,insert,13.357120900000155
bintree,sorted,find,0.0936219000031997
bintree,sorted,delete,0.040907499998866115
1 Структура Режим Операция Время (сек)
2 linklist shuffled insert 2.8069403000008606
3 linklist shuffled find 0.028815499998017913
4 linklist shuffled delete 0.015906399999948917
5 hashtable shuffled insert 0.17993940000087605
6 hashtable shuffled find 0.0018954999977722764
7 hashtable shuffled delete 0.0012972000004083384
8 bintree shuffled insert 0.03314669999963371
9 bintree shuffled find 0.00022189999799593352
10 bintree shuffled delete 0.00011869999798364006
11 linklist sorted insert 2.925224900001922
12 linklist sorted find 0.026056099999550497
13 linklist sorted delete 0.015979499999957625
14 hashtable sorted insert 0.15593369999987772
15 hashtable sorted find 0.0014122000029601622
16 hashtable sorted delete 0.0008025000024645124
17 bintree sorted insert 13.357120900000155
18 bintree sorted find 0.0936219000031997
19 bintree sorted delete 0.040907499998866115

View File

@ -0,0 +1,19 @@
Структура,Режим,Операция,Время (сек)
linklist,shuffled,insert,0.1222989999987476
linklist,shuffled,find,0.005472099997859914
linklist,shuffled,delete,0.0038157999988470692
hashtable,shuffled,insert,0.008049899999605259
hashtable,shuffled,find,0.0003437999985180795
hashtable,shuffled,delete,0.00024619999749120325
bintree,shuffled,insert,0.004746700000396231
bintree,shuffled,find,0.00016089999917312525
bintree,shuffled,delete,8.469999738736078e-05
linklist,sorted,insert,0.12316460000147345
linklist,sorted,find,0.005846299998665927
linklist,sorted,delete,7.130000085453503e-05
hashtable,sorted,insert,0.008595399998739595
hashtable,sorted,find,0.0003437999985180795
hashtable,sorted,delete,0.0002158999996026978
bintree,sorted,insert,0.5351322999995318
bintree,sorted,find,0.01742980000199168
bintree,sorted,delete,0.007677599998714868
1 Структура Режим Операция Время (сек)
2 linklist shuffled insert 0.1222989999987476
3 linklist shuffled find 0.005472099997859914
4 linklist shuffled delete 0.0038157999988470692
5 hashtable shuffled insert 0.008049899999605259
6 hashtable shuffled find 0.0003437999985180795
7 hashtable shuffled delete 0.00024619999749120325
8 bintree shuffled insert 0.004746700000396231
9 bintree shuffled find 0.00016089999917312525
10 bintree shuffled delete 8.469999738736078e-05
11 linklist sorted insert 0.12316460000147345
12 linklist sorted find 0.005846299998665927
13 linklist sorted delete 7.130000085453503e-05
14 hashtable sorted insert 0.008595399998739595
15 hashtable sorted find 0.0003437999985180795
16 hashtable sorted delete 0.0002158999996026978
17 bintree sorted insert 0.5351322999995318
18 bintree sorted find 0.01742980000199168
19 bintree sorted delete 0.007677599998714868

View File

@ -0,0 +1,19 @@
Структура,Режим,Операция,Время (сек)
linklist,shuffled,insert,0.007393100000626873
linklist,shuffled,find,0.001468800001021009
linklist,shuffled,delete,0.0008425000014540274
hashtable,shuffled,insert,0.000751199997466756
hashtable,shuffled,find,0.00013349999790079892
hashtable,shuffled,delete,7.670000195503235e-05
bintree,shuffled,insert,0.0008823000025586225
bintree,shuffled,find,0.00012040000001434237
bintree,shuffled,delete,6.539999958476983e-05
linklist,sorted,insert,0.00702620000083698
linklist,sorted,find,0.0012153999996371567
linklist,sorted,delete,0.0007512000011047348
hashtable,sorted,insert,0.0007286000000021886
hashtable,sorted,find,0.00012399999832268804
hashtable,sorted,delete,8.069999967119657e-05
bintree,sorted,insert,0.03012010000020382
bintree,sorted,find,0.003360800001246389
bintree,sorted,delete,0.0017866999987745658
1 Структура Режим Операция Время (сек)
2 linklist shuffled insert 0.007393100000626873
3 linklist shuffled find 0.001468800001021009
4 linklist shuffled delete 0.0008425000014540274
5 hashtable shuffled insert 0.000751199997466756
6 hashtable shuffled find 0.00013349999790079892
7 hashtable shuffled delete 7.670000195503235e-05
8 bintree shuffled insert 0.0008823000025586225
9 bintree shuffled find 0.00012040000001434237
10 bintree shuffled delete 6.539999958476983e-05
11 linklist sorted insert 0.00702620000083698
12 linklist sorted find 0.0012153999996371567
13 linklist sorted delete 0.0007512000011047348
14 hashtable sorted insert 0.0007286000000021886
15 hashtable sorted find 0.00012399999832268804
16 hashtable sorted delete 8.069999967119657e-05
17 bintree sorted insert 0.03012010000020382
18 bintree sorted find 0.003360800001246389
19 bintree sorted delete 0.0017866999987745658