замеры двоичное дерево изменено
This commit is contained in:
parent
eeb0e16665
commit
409b7dde52
|
|
@ -18,7 +18,7 @@ def generate_test_data(n=10000):
|
|||
def get_random_names(records, n=100):
|
||||
return[name for name, _ in random.sample(records, min(n, len(records)))]
|
||||
|
||||
def run_linked_experiment(records, mode_name):
|
||||
def run_linked_experiments(records, mode_name):
|
||||
|
||||
print(f"\n связный список ({mode_name}):")
|
||||
|
||||
|
|
@ -86,6 +86,146 @@ def run_linked_experiment(records, mode_name):
|
|||
'delete_all': delete_times
|
||||
}
|
||||
|
||||
def run_hash_experiments(records, mode_name):
|
||||
|
||||
print(f"хеш-таблица({mode_name})")
|
||||
|
||||
print("вставка 10000 записей:")
|
||||
|
||||
insert_times = []
|
||||
for run in range(5):
|
||||
start = time.perf_counter()
|
||||
|
||||
buckets = ht_create(1000)
|
||||
for name, phone in records:
|
||||
buckets = ht_insert(buckets, name, phone)
|
||||
|
||||
end = time.perf_counter()
|
||||
insert_times.append(end - start)
|
||||
print(f"Вставка {run+1}/5: {insert_times[-1]:.6f} сек")
|
||||
|
||||
avg_insert = sum(insert_times) / 5
|
||||
print(f"среднее: {avg_insert:.6f} сек")
|
||||
|
||||
print("поиск 110 записей:")
|
||||
|
||||
exist_names = get_random_names(records, 100)
|
||||
non_exist_names = [f"None_{i}" for i in range(10)]
|
||||
|
||||
find_times = []
|
||||
for run in range(5):
|
||||
start = time.perf_counter()
|
||||
|
||||
for name in exist_names:
|
||||
ht_find(buckets, name)
|
||||
for name in non_exist_names:
|
||||
ht_find(buckets, name)
|
||||
|
||||
end = time.pref_cointer()
|
||||
find_times.append(end - start)
|
||||
print(f"поиск {run+1}/5: {find_times[-1]:.6f} сек")
|
||||
|
||||
avg_find = sum(find_times) / 5
|
||||
print(f"среднее: {avg_find:.6f} сек")
|
||||
|
||||
print("удаление 50 случайных записей:")
|
||||
|
||||
to_delete = get_random_names(records,50)
|
||||
|
||||
delete_times = []
|
||||
for run in range(5):
|
||||
current_buckets = buckets.copy()
|
||||
start = time.perf_counter()
|
||||
for name in to_delete:
|
||||
current_buckets = ht_delete(current_buckets, name)
|
||||
end = time.perf_counter()
|
||||
delete_times.append(end - start)
|
||||
print(f"удаление {run+1}/5: {delete_times[-1]:.6f} сек")
|
||||
|
||||
avg_delete = sum(delete_times) / 5
|
||||
print(f"среднее: {avg_delete:.6f} сек")
|
||||
|
||||
return{
|
||||
'structure': 'HashTable',
|
||||
'mode': mode_name,
|
||||
'insert_avg': avg_insert,
|
||||
'insert_all': insert_times,
|
||||
'find_avg': avg_find,
|
||||
'find_all': find_times,
|
||||
'delete_avg': avg_delete,
|
||||
'delete_all': delete_times
|
||||
}
|
||||
|
||||
def run_bst_experiments(records, mode_name):
|
||||
|
||||
print(f"двоичное дерево({mode_name})")
|
||||
|
||||
print("вставка 10000 записей:")
|
||||
|
||||
insert_times = []
|
||||
for run in range(5):
|
||||
start = time.perf_counter()
|
||||
|
||||
root = None
|
||||
for name, phone in records:
|
||||
root = bst_insert(root, name, phone)
|
||||
|
||||
end = time.perf_counter()
|
||||
insert_times.append(end - start)
|
||||
print(f"Вставка {run+1}/5: {insert_times[-1]:.6f} сек")
|
||||
|
||||
avg_insert = sum(insert_times) / 5
|
||||
print(f"среднее: {avg_insert:.6f} сек")
|
||||
|
||||
print("поиск 110 записей:")
|
||||
|
||||
exist_names = get_random_names(records, 100)
|
||||
non_exist_names = [f"None_{i}" for i in range(10)]
|
||||
|
||||
find_times = []
|
||||
for run in range(5):
|
||||
start = time.perf_counter()
|
||||
|
||||
for name in exist_names:
|
||||
bst_find(root, name)
|
||||
for name in non_exist_names:
|
||||
bst_find(root, name)
|
||||
|
||||
end = time.pref_cointer()
|
||||
find_times.append(end - start)
|
||||
print(f"поиск {run+1}/5: {find_times[-1]:.6f} сек")
|
||||
|
||||
avg_find = sum(find_times) / 5
|
||||
print(f"среднее: {avg_find:.6f} сек")
|
||||
|
||||
print("удаление 50 случайных записей:")
|
||||
|
||||
to_delete = get_random_names(records,50)
|
||||
|
||||
delete_times = []
|
||||
for run in range(5):
|
||||
current_root = root
|
||||
start = time.perf_counter()
|
||||
for name in to_delete:
|
||||
current_root = bst_delete(current_root, name)
|
||||
end = time.perf_counter()
|
||||
delete_times.append(end - start)
|
||||
print(f"удаление {run+1}/5: {delete_times[-1]:.6f} сек")
|
||||
|
||||
avg_delete = sum(delete_times) / 5
|
||||
print(f"среднее: {avg_delete:.6f} сек")
|
||||
|
||||
return{
|
||||
'structure': 'BST',
|
||||
'mode': mode_name,
|
||||
'insert_avg': avg_insert,
|
||||
'insert_all': insert_times,
|
||||
'find_avg': avg_find,
|
||||
'find_all': find_times,
|
||||
'delete_avg': avg_delete,
|
||||
'delete_all': delete_times
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user