добавлены генерация тестовых данных и замер времени
This commit is contained in:
parent
e1ad783b49
commit
a095930b97
|
|
@ -180,4 +180,119 @@ def bst_list_all(root):
|
|||
inorder_traversal(node['right'])
|
||||
|
||||
inorder_traversal(root)
|
||||
return records
|
||||
return records
|
||||
|
||||
|
||||
|
||||
#EXPERIMENTAL PART
|
||||
|
||||
# 1. Test data generation
|
||||
|
||||
def generate_records(count=10000):
|
||||
|
||||
records = []
|
||||
for i in range(count):
|
||||
name = f"User_{i:05d}"
|
||||
phone = f"+7-{random.randint(100,999)}-{random.randint(100,999)}-{random.randint(1000,9999)}"
|
||||
records.append((name, phone))
|
||||
|
||||
shuffled = records.copy()
|
||||
random.shuffle(shuffled)
|
||||
sorted_records = sorted(records, key=lambda x: x[0])
|
||||
|
||||
return shuffled, sorted_records
|
||||
|
||||
|
||||
|
||||
# 2. Timing
|
||||
|
||||
def measure_insertion(structure_name, records):
|
||||
|
||||
times = []
|
||||
filled_structure = None
|
||||
|
||||
for run in range(5):
|
||||
if structure_name == "linked_list":
|
||||
structure = None
|
||||
elif structure_name == "hash_table":
|
||||
structure = ht_create(1000)
|
||||
elif structure_name == "bst":
|
||||
structure = None
|
||||
|
||||
start = time.perf_counter()
|
||||
|
||||
for name, phone in records:
|
||||
if structure_name == "linked_list":
|
||||
structure = ll_insert(structure, name, phone)
|
||||
elif structure_name == "hash_table":
|
||||
ht_insert(structure, name, phone)
|
||||
elif structure_name == "bst":
|
||||
structure = bst_insert(structure, name, phone)
|
||||
|
||||
end = time.perf_counter()
|
||||
times.append(end - start)
|
||||
|
||||
if run == 4:
|
||||
filled_structure = structure
|
||||
|
||||
return times, filled_structure
|
||||
|
||||
|
||||
def measure_search(structure_name, structure, search_names):
|
||||
|
||||
times = []
|
||||
|
||||
for run in range(5):
|
||||
start = time.perf_counter()
|
||||
|
||||
for name in search_names:
|
||||
if structure_name == "linked_list":
|
||||
ll_find(structure, name)
|
||||
elif structure_name == "hash_table":
|
||||
ht_find(structure, name)
|
||||
elif structure_name == "bst":
|
||||
bst_find(structure, name)
|
||||
|
||||
end = time.perf_counter()
|
||||
times.append(end - start)
|
||||
|
||||
return times
|
||||
|
||||
|
||||
def measure_deletion(structure_name, original_structure, delete_names):
|
||||
|
||||
times = []
|
||||
|
||||
for run in range(5):
|
||||
if structure_name == "linked_list":
|
||||
all_records = ll_list_all(original_structure)
|
||||
test_structure = None
|
||||
for name, phone in all_records:
|
||||
test_structure = ll_insert(test_structure, name, phone)
|
||||
|
||||
elif structure_name == "hash_table":
|
||||
all_records = ht_list_all(original_structure)
|
||||
test_structure = ht_create(1000)
|
||||
for name, phone in all_records:
|
||||
ht_insert(test_structure, name, phone)
|
||||
|
||||
elif structure_name == "bst":
|
||||
all_records = bst_list_all(original_structure)
|
||||
test_structure = None
|
||||
for name, phone in all_records:
|
||||
test_structure = bst_insert(test_structure, name, phone)
|
||||
|
||||
start = time.perf_counter()
|
||||
|
||||
for name in delete_names:
|
||||
if structure_name == "linked_list":
|
||||
test_structure = ll_delete(test_structure, name)
|
||||
elif structure_name == "hash_table":
|
||||
ht_delete(test_structure, name)
|
||||
elif structure_name == "bst":
|
||||
test_structure = bst_delete(test_structure, name)
|
||||
|
||||
end = time.perf_counter()
|
||||
times.append(end - start)
|
||||
|
||||
return times
|
||||
Loading…
Reference in New Issue
Block a user