From 0046bde7598b8ebcacf6a3855f81ae8977d9ecab Mon Sep 17 00:00:00 2001 From: konnovaea Date: Sun, 26 Apr 2026 20:41:45 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=B4=D0=B2=D0=BE=D0=B8=D1=87=D0=BD=D0=BE?= =?UTF-8?q?=D0=B5=20=D0=B4=D0=B5=D1=80=D0=B5=D0=B2=D0=BE=20=D0=B8=20=D0=B8?= =?UTF-8?q?=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=BE?= =?UTF-8?q?=D0=BF=D0=B5=D1=87=D0=B0=D1=82=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- konnovaea/experiments.py | 35 +++++++++++++++++++++++++++++++---- konnovaea/phonebook.py | 29 ++++++++++++++++++++++------- 2 files changed, 53 insertions(+), 11 deletions(-) diff --git a/konnovaea/experiments.py b/konnovaea/experiments.py index a09364b..474b77a 100644 --- a/konnovaea/experiments.py +++ b/konnovaea/experiments.py @@ -51,7 +51,7 @@ def run_linked_experiments(records, mode_name): for name in non_exist_names: ll_find(head, name) - end = time.pref_cointer() + end = time.perf_counter() find_times.append(end - start) print(f"поиск {run+1}/5: {find_times[-1]:.6f} сек") @@ -121,7 +121,7 @@ def run_hash_experiments(records, mode_name): for name in non_exist_names: ht_find(buckets, name) - end = time.pref_cointer() + end = time.perf_counter() find_times.append(end - start) print(f"поиск {run+1}/5: {find_times[-1]:.6f} сек") @@ -191,7 +191,7 @@ def run_bst_experiments(records, mode_name): for name in non_exist_names: bst_find(root, name) - end = time.pref_cointer() + end = time.perf_counter() find_times.append(end - start) print(f"поиск {run+1}/5: {find_times[-1]:.6f} сек") @@ -255,4 +255,31 @@ def save_result_to_csv(all_results): with open("docs/data/resurts.csv", "w", newline="", encoding="utf-8") as f: writer = csv.writer(f) writer.writerow(csv_rows) - print(f"\nрезультаты сохранены") \ No newline at end of file + print(f"\nрезультаты сохранены") + +def main(): + print("эксперименты по замеру производительности") + + records_shuffled, records_sorted = generate_test_data(10000) + + all_results = [] + + print("режим: случайный порядок") + + all_results.append(run_linked_experiments(records_shuffled, "случайный")) + all_results.append(run_hash_experiments(records_shuffled, "случайный")) + all_results.append(run_bst_experiments(records_shuffled, "случайный")) + + print("режим: отсортированный порядок") + + all_results.append(run_linked_experiments(records_sorted, "отсортированный")) + all_results.append(run_hash_experiments(records_sorted, "отсортированный")) + all_results.append(run_bst_experiments(records_sorted, "отсортированный")) + + save_result_to_csv(all_results) + +if __name__== "__main__": + main() + + + diff --git a/konnovaea/phonebook.py b/konnovaea/phonebook.py index 1204fb7..d38d076 100644 --- a/konnovaea/phonebook.py +++ b/konnovaea/phonebook.py @@ -77,16 +77,31 @@ def ht_list_all(buckets): return records def bst_insert(root, name, phone): + + new_node = {'name': name, 'phone': phone, 'left': None, 'right': None} + if root is None: - return {'name': name, 'phone': phone, 'left': None, 'right': None} - if name < root['name']: - root['left'] = bst_insert(root['left'], name, phone) - elif name > root['name']: - root['right'] = bst_insert(root['right'], name, phone) - else: - root['phone'] = phone + return new_node + + current = root + while True: + if name < current['name']: + if current['left'] is None: + current['left'] = new_node + break + current = current['left'] + elif name > current['name']: + if current['right'] is None: + current['right'] = new_node + break + current = current['right'] + else: + current['phone'] = phone + break + return root + def bst_find(root, name): current = root while current is not None: