Удалить SmirnovaVYu/docs/data/experiment.py
This commit is contained in:
parent
d18d60135e
commit
d77c2d9b48
|
|
@ -1,94 +0,0 @@
|
||||||
import time
|
|
||||||
import numpy as np
|
|
||||||
from linkedlist import ll_insert, ll_find, ll_delete
|
|
||||||
from hashtable import ht_create, ht_insert, ht_find, ht_delete
|
|
||||||
from bst import bst_insert, bst_find, bst_delete
|
|
||||||
|
|
||||||
|
|
||||||
def measure_insert(records, struct_type, params=None): #Замер времени вставки всех записей
|
|
||||||
start = time.perf_counter()
|
|
||||||
|
|
||||||
if struct_type == 'linkedlist':
|
|
||||||
head = None
|
|
||||||
for name, phone in records:
|
|
||||||
head = ll_insert(head, name, phone)
|
|
||||||
result = head
|
|
||||||
|
|
||||||
elif struct_type == 'hashtable':
|
|
||||||
size = params.get('size', 1000) if params else 1000
|
|
||||||
buckets = ht_create(size)
|
|
||||||
for name, phone in records:
|
|
||||||
ht_insert(buckets, name, phone)
|
|
||||||
result = buckets
|
|
||||||
|
|
||||||
elif struct_type == 'bst':
|
|
||||||
root = None
|
|
||||||
for name, phone in records:
|
|
||||||
root = bst_insert(root, name, phone)
|
|
||||||
result = root
|
|
||||||
|
|
||||||
end = time.perf_counter()
|
|
||||||
return end - start, result
|
|
||||||
|
|
||||||
|
|
||||||
def measure_find(structure, names_to_find, struct_type): #Замер времени поиска записей
|
|
||||||
start = time.perf_counter()
|
|
||||||
|
|
||||||
for name in names_to_find:
|
|
||||||
if struct_type == 'linkedlist':
|
|
||||||
ll_find(structure, name)
|
|
||||||
elif struct_type == 'hashtable':
|
|
||||||
ht_find(structure, name)
|
|
||||||
elif struct_type == 'bst':
|
|
||||||
bst_find(structure, name)
|
|
||||||
|
|
||||||
end = time.perf_counter()
|
|
||||||
return end - start
|
|
||||||
|
|
||||||
|
|
||||||
def measure_delete(structure, names_to_delete, struct_type): #Замер времени удаления записей
|
|
||||||
start = time.perf_counter()
|
|
||||||
|
|
||||||
for name in names_to_delete:
|
|
||||||
if struct_type == 'linkedlist':
|
|
||||||
structure = ll_delete(structure, name)
|
|
||||||
elif struct_type == 'hashtable':
|
|
||||||
ht_delete(structure, name)
|
|
||||||
elif struct_type == 'bst':
|
|
||||||
structure = bst_delete(structure, name)
|
|
||||||
|
|
||||||
end = time.perf_counter()
|
|
||||||
return end - start, structure
|
|
||||||
|
|
||||||
|
|
||||||
def run_single_experiment(struct_type, mode, data_records, names_to_find, names_to_delete, repeats, params=None): #Запуск одного эксперимента
|
|
||||||
insert_times = []
|
|
||||||
find_times = []
|
|
||||||
delete_times = []
|
|
||||||
|
|
||||||
for i in range(repeats):
|
|
||||||
if struct_type == 'hashtable':
|
|
||||||
insert_time, structure = measure_insert(data_records, struct_type, params)
|
|
||||||
else:
|
|
||||||
insert_time, structure = measure_insert(data_records, struct_type)
|
|
||||||
insert_times.append(insert_time)
|
|
||||||
|
|
||||||
find_time = measure_find(structure, names_to_find, struct_type)
|
|
||||||
find_times.append(find_time)
|
|
||||||
|
|
||||||
delete_time, structure = measure_delete(structure, names_to_delete, struct_type)
|
|
||||||
delete_times.append(delete_time)
|
|
||||||
|
|
||||||
return {
|
|
||||||
'structure': struct_type,
|
|
||||||
'mode': mode,
|
|
||||||
'insert_mean': np.mean(insert_times),
|
|
||||||
'insert_std': np.std(insert_times),
|
|
||||||
'insert_all': insert_times,
|
|
||||||
'find_mean': np.mean(find_times),
|
|
||||||
'find_std': np.std(find_times),
|
|
||||||
'find_all': find_times,
|
|
||||||
'delete_mean': np.mean(delete_times),
|
|
||||||
'delete_std': np.std(delete_times),
|
|
||||||
'delete_all': delete_times
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue
Block a user