From 1b7ad332787785f57bc7c206c48276b9ec83ebb3 Mon Sep 17 00:00:00 2001 From: pogodinda Date: Thu, 21 May 2026 20:29:55 +0300 Subject: [PATCH] [1] lab1 --- pogodinda/lab1/benchmark.py | 133 ++++++++++++++++++++++++ pogodinda/lab1/bst_phonebook.py | 66 ++++++++++++ pogodinda/lab1/docs/data/graph.png | Bin 0 -> 87511 bytes pogodinda/lab1/docs/data/results.csv | 19 ++++ pogodinda/lab1/docs/report.md | 48 +++++++++ pogodinda/lab1/hash_table_phonebook.py | 31 ++++++ pogodinda/lab1/linked_list_phonebook.py | 54 ++++++++++ pogodinda/lab1/plot_results.py | 85 +++++++++++++++ 8 files changed, 436 insertions(+) create mode 100644 pogodinda/lab1/benchmark.py create mode 100644 pogodinda/lab1/bst_phonebook.py create mode 100644 pogodinda/lab1/docs/data/graph.png create mode 100644 pogodinda/lab1/docs/data/results.csv create mode 100644 pogodinda/lab1/docs/report.md create mode 100644 pogodinda/lab1/hash_table_phonebook.py create mode 100644 pogodinda/lab1/linked_list_phonebook.py create mode 100644 pogodinda/lab1/plot_results.py diff --git a/pogodinda/lab1/benchmark.py b/pogodinda/lab1/benchmark.py new file mode 100644 index 0000000..c415c19 --- /dev/null +++ b/pogodinda/lab1/benchmark.py @@ -0,0 +1,133 @@ +import time +import random +import csv +import sys +from linked_list_phonebook import * +from hash_table_phonebook import * +from bst_phonebook import * + +sys.setrecursionlimit(100000) + + + +def generate_test_data(n=10000): + """Генерация тестовых данных""" + uniform_records = [(f"User_{i:05d}", f"+7-999-{i:07d}") for i in range(n)] + + shuffled_records = uniform_records.copy() + random.shuffle(shuffled_records) + + sorted_records = sorted(uniform_records, key=lambda x: x[0]) + + existing_names = [f"User_{i:05d}" for i in random.sample(range(n), 100)] + non_existing_names = [f"None_{i:05d}" for i in range(10)] + search_names = existing_names + non_existing_names + + delete_names = [f"User_{i:05d}" for i in random.sample(range(n), 50)] + + return { + 'shuffled': shuffled_records, + 'sorted': sorted_records, + 'search_names': search_names, + 'delete_names': delete_names + } + +def run_benchmarks(): + print("Генерация тестовых данных...") + N = 10000 + test_data = generate_test_data(N) + + results = [] + + structures = [ + ('LinkedList', 'll'), + ('HashTable', 'ht'), + ('BST', 'bst') + ] + + modes = [ + ('случайный', test_data['shuffled']), + ('отсортированный', test_data['sorted']) + ] + + for struct_name, struct_type in structures: + print(f"\n=== Тестирование {struct_name} ===") + + for mode_name, records in modes: + print(f" Режим: {mode_name}") + + # Создаем структуру и меряем вставку + if struct_type == 'll': + structure = None + start = time.perf_counter() + for name, phone in records: + structure = ll_insert(structure, name, phone) + end = time.perf_counter() + insert_time = end - start + + elif struct_type == 'ht': + structure = create_hash_table(5000) + start = time.perf_counter() + for name, phone in records: + ht_insert(structure, name, phone) + end = time.perf_counter() + insert_time = end - start + + elif struct_type == 'bst': + structure = None + start = time.perf_counter() + for name, phone in records: + structure = bst_insert(structure, name, phone) + end = time.perf_counter() + insert_time = end - start + + print(f" Вставка: {insert_time:.6f} сек") + results.append([struct_name, mode_name, "вставка", insert_time]) + + # Поиск + start = time.perf_counter() + for name in test_data['search_names']: + if struct_type == 'll': + ll_find(structure, name) + elif struct_type == 'ht': + ht_find(structure, name) + elif struct_type == 'bst': + bst_find(structure, name) + end = time.perf_counter() + find_time = end - start + print(f" Поиск (60 запросов): {find_time:.6f} сек") + results.append([struct_name, mode_name, "поиск", find_time]) + + # Удаление + start = time.perf_counter() + for name in test_data['delete_names']: + if struct_type == 'll': + structure = ll_delete(structure, name) + elif struct_type == 'ht': + ht_delete(structure, name) + elif struct_type == 'bst': + structure = bst_delete(structure, name) + end = time.perf_counter() + delete_time = end - start + print(f" Удаление (30 записей): {delete_time:.6f} сек") + results.append([struct_name, mode_name, "удаление", delete_time]) + + # Сохраняем в CSV + with open('docs/data/results.csv', 'w', newline='', encoding='utf-8') as f: + writer = csv.writer(f) + writer.writerow(['Структура', 'Режим', 'Операция', 'Время (сек)']) + writer.writerows(results) + + print("\n" + "="*60) + print("ИТОГОВЫЕ РЕЗУЛЬТАТЫ (в секундах)") + print("="*60) + print(f"{'Структура':12} {'Режим':12} {'Операция':10} {'Время':>10}") + print("-"*50) + for row in results: + print(f"{row[0]:12} {row[1]:12} {row[2]:10} {row[3]:10.6f}") + + print(f"\nРезультаты сохранены в docs/data/results.csv") + +if __name__ == "__main__": + random.seed(42) + run_benchmarks() \ No newline at end of file diff --git a/pogodinda/lab1/bst_phonebook.py b/pogodinda/lab1/bst_phonebook.py new file mode 100644 index 0000000..2310471 --- /dev/null +++ b/pogodinda/lab1/bst_phonebook.py @@ -0,0 +1,66 @@ +def create_bst_node(name, phone): + return {'name': name, 'phone': phone, 'left': None, 'right': None} + +def bst_insert(root, name, phone): + if root is None: + return create_bst_node(name, phone) + + 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 root + +def bst_find(root, name): + if root is None: + return None + + if name < root['name']: + return bst_find(root['left'], name) + elif name > root['name']: + return bst_find(root['right'], name) + else: + return root['phone'] + +def bst_find_min(root): + current = root + while current and current['left'] is not None: + current = current['left'] + return current + +def bst_delete(root, name): + if root is None: + return None + + if name < root['name']: + root['left'] = bst_delete(root['left'], name) + elif name > root['name']: + root['right'] = bst_delete(root['right'], name) + else: + if root['left'] is None: + return root['right'] + elif root['right'] is None: + return root['left'] + + min_node = bst_find_min(root['right']) + root['name'] = min_node['name'] + root['phone'] = min_node['phone'] + root['right'] = bst_delete(root['right'], min_node['name']) + + return root + +def bst_list_all(root): + records = [] + + def inorder_traversal(node): + if node is None: + return + inorder_traversal(node['left']) + records.append((node['name'], node['phone'])) + inorder_traversal(node['right']) + + inorder_traversal(root) + return records \ No newline at end of file diff --git a/pogodinda/lab1/docs/data/graph.png b/pogodinda/lab1/docs/data/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..646b5d553118fbc93855b94d6e7e98b6d5463162 GIT binary patch literal 87511 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 0: + ax.annotate(f'{height:.4f}', + xy=(bar.get_x() + bar.get_width()/2, height), + xytext=(0, 3), textcoords="offset points", + ha='center', va='bottom', fontsize=8) + + for bar in bars2: + height = bar.get_height() + if height > 0: + ax.annotate(f'{height:.4f}', + xy=(bar.get_x() + bar.get_width()/2, height), + xytext=(0, 3), textcoords="offset points", + ha='center', va='bottom', fontsize=8) + +# Легенда ПОД графиками, чтобы не накладывалась +fig.legend(labels=['Случайный', 'Отсортированный'], + loc='lower center', bbox_to_anchor=(0.5, -0.05), + ncol=2, fontsize=11, frameon=True, fancybox=True, shadow=True) + +plt.suptitle('Сравнение производительности структур данных (10000 записей)', + fontsize=14, fontweight='bold', y=1.02) +plt.tight_layout() +plt.subplots_adjust(bottom=0.12) # Оставляем место для легенды снизу +plt.savefig('docs/data/graph.png', dpi=150, bbox_inches='tight', facecolor='white') +plt.show() + +print("График сохранён в docs/data/graph.png") \ No newline at end of file