созданы измерительные функции для каждого типа данных
This commit is contained in:
novikovsd 2026-05-24 13:29:20 +00:00
parent a740a6cb6b
commit 859ee847dd

View File

@ -158,9 +158,63 @@ def bst_list_all(root):
inorder(root, result)
return result
def generate_test_data(n=10000):
def generate_test_data(n=10000):
records = [(f"User_{i:05d}", f"+7-999-{i:05d}") for i in range(n)]
records_sorted = records[:]
records_shuffled = records[:]
random.shuffle(records_shuffled)
return records_sorted, records_shuffled
return records_sorted, records_shuffled
def measure_insert(struct_name, records):
start = time.perf_counter()
if struct_name == "LinkedList":
head = None
for name, phone in records:
head = ll_insert(head, name, phone)
obj = head
elif struct_name == "HashTable":
buckets = ht_create(bucket_count=2000)
for name, phone in records:
ht_insert(buckets, name, phone)
obj = buckets
elif struct_name == "BST":
root = None
for name, phone in records:
root = bst_insert(root, name, phone)
obj = root
else:
raise ValueError(f"Unknown structure: {struct_name}")
elapsed = time.perf_counter() - start
return elapsed, obj
def measure_find(obj, struct_name, existing_names, nonexisting_names):
start = time.perf_counter()
for name in existing_names:
if struct_name == "LinkedList":
ll_find(obj, name)
elif struct_name == "HashTable":
ht_find(obj, name)
else:
bst_find(obj, name)
for name in nonexisting_names:
if struct_name == "LinkedList":
ll_find(obj, name)
elif struct_name == "HashTable":
ht_find(obj, name)
else:
bst_find(obj, name)
return time.perf_counter() - start
def measure_delete(obj, struct_name, names_to_delete):
start = time.perf_counter()
if struct_name == "LinkedList":
for name in names_to_delete:
obj = ll_delete(obj, name)
elif struct_name == "HashTable":
for name in names_to_delete:
ht_delete(obj, name)
else:
for name in names_to_delete:
obj = bst_delete(obj, name)
elapsed = time.perf_counter() - start
return elapsed, obj