From 15ec46afb382e0b1167b7cf0c3509877a0baaa58 Mon Sep 17 00:00:00 2001 From: MashinDD Date: Mon, 11 May 2026 16:40:10 +0300 Subject: [PATCH] =?UTF-8?q?[1]=20=D0=BB=D0=B0=D0=B1=D0=B0=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MashinDD/lab1/docs/data/benchmark.py | 210 ++++++++++++++++++ .../docs/data/comparison_by_operation.png | Bin 0 -> 87579 bytes MashinDD/lab1/docs/data/phone_book.py | 168 ++++++++++++++ MashinDD/lab1/docs/data/plot_results.py | 128 +++++++++++ MashinDD/lab1/docs/data/results.csv | 19 ++ MashinDD/lab1/docs/data/sorted_vs_random.png | Bin 0 -> 56968 bytes MashinDD/lab1/docs/report.md | 145 ++++++++++++ 7 files changed, 670 insertions(+) create mode 100644 MashinDD/lab1/docs/data/benchmark.py create mode 100644 MashinDD/lab1/docs/data/comparison_by_operation.png create mode 100644 MashinDD/lab1/docs/data/phone_book.py create mode 100644 MashinDD/lab1/docs/data/plot_results.py create mode 100644 MashinDD/lab1/docs/data/results.csv create mode 100644 MashinDD/lab1/docs/data/sorted_vs_random.png create mode 100644 MashinDD/lab1/docs/report.md diff --git a/MashinDD/lab1/docs/data/benchmark.py b/MashinDD/lab1/docs/data/benchmark.py new file mode 100644 index 0000000..13f2877 --- /dev/null +++ b/MashinDD/lab1/docs/data/benchmark.py @@ -0,0 +1,210 @@ +import time +import random +import csv +import os + +from phone_book import ( + ll_insert, ll_find, ll_delete, ll_list_all, + ht_make, ht_insert, ht_find, ht_delete, ht_list_all, + bst_insert, bst_find, bst_delete, bst_list_all, +) + +N = 10_000 +REPEATS = 5 +SEARCH_COUNT = 110 +DELETE_COUNT = 50 +HT_SIZE = 256 + +RANDOM_SEED = 42 +random.seed(RANDOM_SEED) + +OUTPUT_DIR = os.path.dirname(__file__) +os.makedirs(OUTPUT_DIR, exist_ok=True) +CSV_PATH = os.path.join(OUTPUT_DIR, 'results.csv') + +def generate_records(n): + records = [(f"User_{i:05d}", f"+7{random.randint(1000000000, 9999999999)}") + for i in range(n)] + return records + + +records_base = generate_records(N) + +records_shuffled = records_base[:] +random.shuffle(records_shuffled) + +records_sorted = sorted(records_base, key=lambda x: x[0]) + +existing_names = [r[0] for r in random.sample(records_base, 100)] +missing_names = [f"None_{i}" for i in range(10)] +search_names = existing_names + missing_names + +delete_names = [r[0] for r in random.sample(records_base, DELETE_COUNT)] + +def measure(func, *args, **kwargs): + start = time.perf_counter() + result = func(*args, **kwargs) + end = time.perf_counter() + return end - start, result + +def bench_linked_list(records, mode_label): + times = {'insert': [], 'find': [], 'delete': []} + + for _ in range(REPEATS): + head = None + t_start = time.perf_counter() + for name, phone in records: + head = ll_insert(head, name, phone) + times['insert'].append(time.perf_counter() - t_start) + + t_start = time.perf_counter() + for name in search_names: + ll_find(head, name) + times['find'].append(time.perf_counter() - t_start) + + t_start = time.perf_counter() + for name in delete_names: + head = ll_delete(head, name) + times['delete'].append(time.perf_counter() - t_start) + + return times + + +def bench_hash_table(records, mode_label): + times = {'insert': [], 'find': [], 'delete': []} + + for _ in range(REPEATS): + buckets = ht_make(HT_SIZE) + t_start = time.perf_counter() + for name, phone in records: + ht_insert(buckets, name, phone) + times['insert'].append(time.perf_counter() - t_start) + + t_start = time.perf_counter() + for name in search_names: + ht_find(buckets, name) + times['find'].append(time.perf_counter() - t_start) + + t_start = time.perf_counter() + for name in delete_names: + ht_delete(buckets, name) + times['delete'].append(time.perf_counter() - t_start) + + return times + + +def bench_bst(records, mode_label): + times = {'insert': [], 'find': [], 'delete': []} + + for _ in range(REPEATS): + root = None + t_start = time.perf_counter() + for name, phone in records: + root = bst_insert(root, name, phone) + times['insert'].append(time.perf_counter() - t_start) + + t_start = time.perf_counter() + for name in search_names: + bst_find(root, name) + times['find'].append(time.perf_counter() - t_start) + + t_start = time.perf_counter() + for name in delete_names: + root = bst_delete(root, name) + times['delete'].append(time.perf_counter() - t_start) + + return times + +def avg(lst): + return sum(lst) / len(lst) + + +def run_all(): + print(f"Запуск бенчмарков: N={N}, повторений={REPEATS}\n") + print(f"{'Структура':<15} {'Режим':<12} {'Операция':<10} " + f"{'Среднее (с)':<14} {'Все замеры'}") + print("-" * 80) + + all_results = [["Структура", "Режим", "Операция", "Среднее (с)"] + + [f"Замер_{i+1}" for i in range(REPEATS)]] + + datasets = [ + (records_shuffled, "случайный"), + (records_sorted, "сортированный"), + ] + + benchmarks = [ + ("LinkedList", bench_linked_list), + ("HashTable", bench_hash_table), + ("BST", bench_bst), + ] + + for ds_records, ds_mode in datasets: + for struct_name, bench_func in benchmarks: + print(f"\n [{struct_name}] режим: {ds_mode}") + if struct_name == "BST" and ds_mode == "сортированный": + import sys + sys.setrecursionlimit(50_000) + + times = bench_func(ds_records, ds_mode) + + for op, op_times in times.items(): + mean = avg(op_times) + row = [struct_name, ds_mode, op, f"{mean:.6f}"] + \ + [f"{t:.6f}" for t in op_times] + all_results.append(row) + + print(f" {op:<10} среднее={mean:.6f}с " + f"замеры={[f'{t:.4f}' for t in op_times]}") + + with open(CSV_PATH, 'w', newline='', encoding='utf-8') as f: + writer = csv.writer(f) + writer.writerows(all_results) + + print(f"\n✅ Результаты сохранены в: {CSV_PATH}") + return all_results + +def smoke_test(): + print("=== Smoke Test ===\n") + + test_data = [("Alice", "111"), ("Bob", "222"), ("Charlie", "333")] + + head = None + for name, phone in test_data: + head = ll_insert(head, name, phone) + assert ll_find(head, "Alice") == "111" + assert ll_find(head, "Bob") == "222" + assert ll_find(head, "Nobody") is None + head = ll_delete(head, "Bob") + assert ll_find(head, "Bob") is None + sorted_ll = ll_list_all(head) + assert sorted_ll == [("Alice", "111"), ("Charlie", "333")] + print("✅ LinkedList — OK") + + buckets = ht_make(16) + for name, phone in test_data: + ht_insert(buckets, name, phone) + assert ht_find(buckets, "Charlie") == "333" + assert ht_find(buckets, "Nobody") is None + ht_delete(buckets, "Alice") + assert ht_find(buckets, "Alice") is None + sorted_ht = ht_list_all(buckets) + assert sorted_ht == [("Bob", "222"), ("Charlie", "333")] + print("✅ HashTable — OK") + + root = None + for name, phone in test_data: + root = bst_insert(root, name, phone) + assert bst_find(root, "Alice") == "111" + assert bst_find(root, "Nobody") is None + root = bst_delete(root, "Alice") + assert bst_find(root, "Alice") is None + sorted_bst = bst_list_all(root) + assert sorted_bst == [("Bob", "222"), ("Charlie", "333")] + print("✅ BST — OK") + + print("\nВсе тесты пройдены!\n") + +if __name__ == "__main__": + smoke_test() + results = run_all() diff --git a/MashinDD/lab1/docs/data/comparison_by_operation.png b/MashinDD/lab1/docs/data/comparison_by_operation.png new file mode 100644 index 0000000000000000000000000000000000000000..81ae5b09d229a4ef535f8aa2fab5eb29fee5a1ef GIT binary patch literal 87579 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 FzW}suxgY=l literal 0 HcmV?d00001 diff --git a/MashinDD/lab1/docs/data/phone_book.py b/MashinDD/lab1/docs/data/phone_book.py new file mode 100644 index 0000000..297f2c5 --- /dev/null +++ b/MashinDD/lab1/docs/data/phone_book.py @@ -0,0 +1,168 @@ +def ll_make_node(name, phone): + return {'name': name, 'phone': phone, 'next': None} + + +def ll_insert(head, name, phone): + if head is None: + return ll_make_node(name, phone) + + current = head + while current is not None: + if current['name'] == name: + current['phone'] = phone + return head + current = current['next'] + + new_node = ll_make_node(name, phone) + new_node['next'] = head + return new_node + + +def ll_find(head, name): + current = head + while current is not None: + if current['name'] == name: + return current['phone'] + current = current['next'] + return None + + +def ll_delete(head, name): + if head is None: + return None + + if head['name'] == name: + return head['next'] + + current = head + while current['next'] is not None: + if current['next']['name'] == name: + current['next'] = current['next']['next'] + return head + current = current['next'] + + return head + + +def ll_list_all(head): + result = [] + current = head + while current is not None: + result.append((current['name'], current['phone'])) + current = current['next'] + return sorted(result, key=lambda x: x[0]) + +def ht_make(size=256): + return [None] * size + + +def ht_hash(buckets, name): + return hash(name) % len(buckets) + + +def ht_insert(buckets, name, phone): + idx = ht_hash(buckets, name) + buckets[idx] = ll_insert(buckets[idx], name, phone) + + +def ht_find(buckets, name): + idx = ht_hash(buckets, name) + return ll_find(buckets[idx], name) + + +def ht_delete(buckets, name): + idx = ht_hash(buckets, name) + buckets[idx] = ll_delete(buckets[idx], name) + + +def ht_list_all(buckets): + result = [] + for bucket_head in buckets: + current = bucket_head + while current is not None: + result.append((current['name'], current['phone'])) + current = current['next'] + return sorted(result, key=lambda x: x[0]) + +def bst_make_node(name, phone): + return {'name': name, 'phone': phone, 'left': None, 'right': None} + + +def bst_insert(root, name, phone): + new_node = bst_make_node(name, phone) + + if root is None: + return new_node + + current = root + while True: + if name == current['name']: + current['phone'] = phone + return root + elif name < current['name']: + if current['left'] is None: + current['left'] = new_node + return root + current = current['left'] + else: + if current['right'] is None: + current['right'] = new_node + return root + current = current['right'] + + +def bst_find(root, name): + current = root + while current is not None: + if name == current['name']: + return current['phone'] + elif name < current['name']: + current = current['left'] + else: + current = current['right'] + return None + + +def _bst_min_node(node): + current = node + while 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'] + else: + successor = _bst_min_node(root['right']) + root['name'] = successor['name'] + root['phone'] = successor['phone'] + root['right'] = bst_delete(root['right'], successor['name']) + + return root + + +def bst_list_all(root): + result = [] + stack = [] + current = root + + while current is not None or stack: + while current is not None: + stack.append(current) + current = current['left'] + current = stack.pop() + result.append((current['name'], current['phone'])) + current = current['right'] + + return result diff --git a/MashinDD/lab1/docs/data/plot_results.py b/MashinDD/lab1/docs/data/plot_results.py new file mode 100644 index 0000000..ef870c8 --- /dev/null +++ b/MashinDD/lab1/docs/data/plot_results.py @@ -0,0 +1,128 @@ +import csv +import os + +try: + import matplotlib.pyplot as plt + import matplotlib.patches as mpatches + HAS_MPL = True +except ImportError: + HAS_MPL = False + print("⚠️ matplotlib не установлен. Установите: pip install matplotlib") + print(" Графики будут пропущены, таблица результатов выведена в терминал.\n") + +CSV_PATH = os.path.join(os.path.dirname(__file__), 'results.csv') +PLOTS_DIR = os.path.dirname(__file__) + + +def load_results(path): + data = {} + with open(path, newline='', encoding='utf-8') as f: + reader = csv.reader(f) + header = next(reader) + for row in reader: + struct, mode, op = row[0], row[1], row[2] + mean = float(row[3]) + data[(struct, mode, op)] = mean + return data + +STRUCTS = ["LinkedList", "HashTable", "BST"] +MODES = ["случайный", "сортированный"] +OPS = ["insert", "find", "delete"] +COLORS = {"LinkedList": "#4E9AF1", "HashTable": "#F4845F", "BST": "#6BCB77"} + + +def plot_by_operation(data): + fig, axes = plt.subplots(1, 3, figsize=(15, 5)) + fig.suptitle("Сравнение структур данных\n(телефонный справочник, N=10 000)", + fontsize=14, fontweight='bold') + + for ax, op in zip(axes, OPS): + x_labels = [] + values = [] + colors = [] + + for mode in MODES: + for struct in STRUCTS: + key = (struct, mode, op) + val = data.get(key, 0) + x_labels.append(f"{struct}\n({mode[:4]})") + values.append(val) + colors.append(COLORS[struct]) + + bars = ax.bar(range(len(values)), values, color=colors, + edgecolor='white', linewidth=0.8) + + ax.set_xticks(range(len(x_labels))) + ax.set_xticklabels(x_labels, fontsize=8, rotation=15, ha='right') + ax.set_ylabel("Время (с)", fontsize=9) + ax.set_title(f"Операция: {op}", fontweight='bold') + ax.grid(axis='y', alpha=0.3) + + for bar, val in zip(bars, values): + ax.text(bar.get_x() + bar.get_width() / 2, + bar.get_height() + max(values) * 0.01, + f"{val:.4f}", + ha='center', va='bottom', fontsize=7) + + patches = [mpatches.Patch(color=c, label=s) for s, c in COLORS.items()] + fig.legend(handles=patches, loc='lower center', ncol=3, + bbox_to_anchor=(0.5, -0.05)) + + plt.tight_layout() + out_path = os.path.join(PLOTS_DIR, 'comparison_by_operation.png') + plt.savefig(out_path, dpi=150, bbox_inches='tight') + print(f"✅ График сохранён: {out_path}") + plt.show() + + +def plot_sorted_vs_random(data): + fig, axes = plt.subplots(1, 3, figsize=(14, 5)) + fig.suptitle("Влияние порядка данных на время операций", + fontsize=13, fontweight='bold') + + for ax, struct in zip(axes, STRUCTS): + rand_vals = [data.get((struct, "случайный", op), 0) for op in OPS] + sort_vals = [data.get((struct, "сортированный", op), 0) for op in OPS] + + x = range(len(OPS)) + w = 0.35 + bars1 = ax.bar([i - w/2 for i in x], rand_vals, width=w, + label="случайный", color="#4E9AF1", edgecolor='white') + bars2 = ax.bar([i + w/2 for i in x], sort_vals, width=w, + label="сортированный", color="#F4845F", edgecolor='white') + + ax.set_xticks(list(x)) + ax.set_xticklabels(OPS) + ax.set_title(struct, fontweight='bold') + ax.set_ylabel("Время (с)", fontsize=9) + ax.legend(fontsize=8) + ax.grid(axis='y', alpha=0.3) + + plt.tight_layout() + out_path = os.path.join(PLOTS_DIR, 'sorted_vs_random.png') + plt.savefig(out_path, dpi=150, bbox_inches='tight') + print(f"✅ График сохранён: {out_path}") + plt.show() + + +def print_table(data): + print(f"\n{'Структура':<12} {'Режим':<16} {'Операция':<10} {'Время (с)':<12}") + print("-" * 52) + for (struct, mode, op), mean in sorted(data.items()): + print(f"{struct:<12} {mode:<16} {op:<10} {mean:.6f}") + +if __name__ == "__main__": + if not os.path.exists(CSV_PATH): + print(f"❌ Файл результатов не найден: {CSV_PATH}") + print(" Сначала запустите: python benchmark.py") + exit(1) + + data = load_results(CSV_PATH) + print_table(data) + + if HAS_MPL: + plot_by_operation(data) + plot_sorted_vs_random(data) + else: + print("\n💡 Установите matplotlib для графиков:") + print(" pip install matplotlib") diff --git a/MashinDD/lab1/docs/data/results.csv b/MashinDD/lab1/docs/data/results.csv new file mode 100644 index 0000000..1312575 --- /dev/null +++ b/MashinDD/lab1/docs/data/results.csv @@ -0,0 +1,19 @@ +Структура,Режим,Операция,Среднее (с),Замер_1,Замер_2,Замер_3,Замер_4,Замер_5 +LinkedList,случайный,insert,1.783629,1.733554,1.709240,1.801448,1.897240,1.776666 +LinkedList,случайный,find,0.023223,0.021751,0.021862,0.026800,0.022409,0.023292 +LinkedList,случайный,delete,0.013033,0.012327,0.012596,0.014570,0.012699,0.012975 +HashTable,случайный,insert,0.014438,0.015055,0.014623,0.015085,0.013625,0.013801 +HashTable,случайный,find,0.000175,0.000195,0.000162,0.000230,0.000150,0.000141 +HashTable,случайный,delete,0.000083,0.000086,0.000074,0.000115,0.000071,0.000071 +BST,случайный,insert,0.014068,0.014706,0.014537,0.014229,0.014224,0.012645 +BST,случайный,find,0.000117,0.000123,0.000117,0.000118,0.000115,0.000111 +BST,случайный,delete,0.000093,0.000109,0.000090,0.000091,0.000089,0.000084 +LinkedList,сортированный,insert,1.925730,1.993312,1.916302,1.940326,1.890758,1.887951 +LinkedList,сортированный,find,0.022090,0.021523,0.024212,0.022322,0.021368,0.021026 +LinkedList,сортированный,delete,0.013715,0.013660,0.014334,0.013582,0.013608,0.013391 +HashTable,сортированный,insert,0.012953,0.014168,0.012098,0.013991,0.012257,0.012253 +HashTable,сортированный,find,0.000129,0.000130,0.000131,0.000130,0.000124,0.000130 +HashTable,сортированный,delete,0.000077,0.000076,0.000079,0.000077,0.000075,0.000077 +BST,сортированный,insert,3.325809,3.408518,3.355628,3.274993,3.285617,3.304288 +BST,сортированный,find,0.029482,0.028956,0.028307,0.033386,0.028663,0.028099 +BST,сортированный,delete,0.037362,0.037118,0.036916,0.039044,0.035960,0.037772 diff --git a/MashinDD/lab1/docs/data/sorted_vs_random.png b/MashinDD/lab1/docs/data/sorted_vs_random.png new file mode 100644 index 0000000000000000000000000000000000000000..5954f08bd830e66fb3fdb8a2112c8d04d0a2fc30 GIT binary patch literal 56968 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%0DyR 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