diff --git a/novikovsd/hashtab.py b/novikovsd/hashtab.py index c06b751..45dc225 100644 --- a/novikovsd/hashtab.py +++ b/novikovsd/hashtab.py @@ -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 \ No newline at end of file + 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 \ No newline at end of file