From d548b612e6cd3ae6fc0ab021e91ac0967538e896 Mon Sep 17 00:00:00 2001 From: VasilevIA Date: Tue, 26 May 2026 15:05:44 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B2=D0=BE=D0=B5=20=D0=B7=D0=B0=D0=B4=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VasilevIA/lab1/docs/data/plot.png | Bin 0 -> 107857 bytes VasilevIA/lab1/docs/data/results.csv | 109 ++++++++++++ VasilevIA/lab1/docs/Отчёт.md | 62 +++++++ VasilevIA/lab1/Задание1.py | 252 +++++++++++++++++++++++++++ 4 files changed, 423 insertions(+) create mode 100644 VasilevIA/lab1/docs/data/plot.png create mode 100644 VasilevIA/lab1/docs/data/results.csv create mode 100644 VasilevIA/lab1/docs/Отчёт.md create mode 100644 VasilevIA/lab1/Задание1.py diff --git a/VasilevIA/lab1/docs/data/plot.png b/VasilevIA/lab1/docs/data/plot.png new file mode 100644 index 0000000000000000000000000000000000000000..8c440d605cbdd7d37ea1967e2c42efb432db771d GIT binary patch literal 107857 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 literal 0 HcmV?d00001 diff --git a/VasilevIA/lab1/docs/data/results.csv b/VasilevIA/lab1/docs/data/results.csv new file mode 100644 index 0000000..54732ee --- /dev/null +++ b/VasilevIA/lab1/docs/data/results.csv @@ -0,0 +1,109 @@ +Структура,Режим,Операция,Повторение,Время (сек) +LinkedList,случайный,вставка,1,10.862003074988023 +LinkedList,случайный,поиск,1,0.14576059998944402 +LinkedList,случайный,удаление,1,0.06351138700847514 +LinkedList,случайный,вставка,2,9.076335112011293 +LinkedList,случайный,поиск,2,0.07830005697906017 +LinkedList,случайный,удаление,2,0.04071814299095422 +LinkedList,случайный,вставка,3,7.758374091994483 +LinkedList,случайный,поиск,3,0.08570227198651992 +LinkedList,случайный,удаление,3,0.04625866198330186 +LinkedList,случайный,вставка,4,8.821534126007464 +LinkedList,случайный,поиск,4,0.08695586599060334 +LinkedList,случайный,удаление,4,0.04239285900257528 +LinkedList,случайный,вставка,5,7.9369856949779205 +LinkedList,случайный,поиск,5,0.07877582201035693 +LinkedList,случайный,удаление,5,0.05032521701650694 +LinkedList,отсортированный,вставка,1,8.435155968007166 +LinkedList,отсортированный,поиск,1,0.07126103100017644 +LinkedList,отсортированный,удаление,1,0.04161756800021976 +LinkedList,отсортированный,вставка,2,8.206100676994538 +LinkedList,отсортированный,поиск,2,0.0691266350040678 +LinkedList,отсортированный,удаление,2,0.03941221899003722 +LinkedList,отсортированный,вставка,3,7.438653188000899 +LinkedList,отсортированный,поиск,3,0.06440455198753625 +LinkedList,отсортированный,удаление,3,0.041969501005951315 +LinkedList,отсортированный,вставка,4,8.762798506999388 +LinkedList,отсортированный,поиск,4,0.07810852699913085 +LinkedList,отсортированный,удаление,4,0.04623017497942783 +LinkedList,отсортированный,вставка,5,6.8261132860207 +LinkedList,отсортированный,поиск,5,0.0646884269954171 +LinkedList,отсортированный,удаление,5,0.038998726988211274 +HashTable,случайный,вставка,1,0.01305636900360696 +HashTable,случайный,поиск,1,0.00017252800171263516 +HashTable,случайный,удаление,1,6.184400990605354e-05 +HashTable,случайный,вставка,2,0.01886462900438346 +HashTable,случайный,поиск,2,8.142000297084451e-05 +HashTable,случайный,удаление,2,4.8632005928084254e-05 +HashTable,случайный,вставка,3,0.010991099989041686 +HashTable,случайный,поиск,3,0.00010417000157758594 +HashTable,случайный,удаление,3,5.93799923080951e-05 +HashTable,случайный,вставка,4,0.011573908996069804 +HashTable,случайный,поиск,4,0.00010824101627804339 +HashTable,случайный,удаление,4,6.125500658527017e-05 +HashTable,случайный,вставка,5,0.009751884994329885 +HashTable,случайный,поиск,5,0.000209546007681638 +HashTable,случайный,удаление,5,0.00010141602251678705 +HashTable,отсортированный,вставка,1,0.010202526987995952 +HashTable,отсортированный,поиск,1,8.401999366469681e-05 +HashTable,отсортированный,удаление,1,4.9825001042336226e-05 +HashTable,отсортированный,вставка,2,0.011403590004192665 +HashTable,отсортированный,поиск,2,9.47820080909878e-05 +HashTable,отсортированный,удаление,2,5.351999425329268e-05 +HashTable,отсортированный,вставка,3,0.008862807007972151 +HashTable,отсортированный,поиск,3,0.00017667299835011363 +HashTable,отсортированный,удаление,3,5.925699952058494e-05 +HashTable,отсортированный,вставка,4,0.00984748499467969 +HashTable,отсортированный,поиск,4,8.850300218909979e-05 +HashTable,отсортированный,удаление,4,5.256402073428035e-05 +HashTable,отсортированный,вставка,5,0.009679784998297691 +HashTable,отсортированный,поиск,5,0.00011247699148952961 +HashTable,отсортированный,удаление,5,6.16690085735172e-05 +BST,случайный,вставка,1,0.145351675018901 +BST,случайный,поиск,1,0.0012233680172357708 +BST,случайный,удаление,1,0.00036901497514918447 +BST,случайный,вставка,2,0.11196767800720409 +BST,случайный,поиск,2,0.00044852300197817385 +BST,случайный,удаление,2,0.0004090379807166755 +BST,случайный,вставка,3,0.09934362399508245 +BST,случайный,поиск,3,0.0005716090090572834 +BST,случайный,удаление,3,0.0002630369854159653 +BST,случайный,вставка,4,0.062331134016858414 +BST,случайный,поиск,4,0.00044452102156355977 +BST,случайный,удаление,4,0.0002924139844253659 +BST,случайный,вставка,5,0.05811125799664296 +BST,случайный,поиск,5,0.0003970380057580769 +BST,случайный,удаление,5,0.0002677540178410709 +BST,отсортированный,вставка,1,27.313725582993357 +BST,отсортированный,поиск,1,0.09994954598369077 +BST,отсортированный,удаление,1,0.10366077398066409 +BST,отсортированный,вставка,2,24.108436000999063 +BST,отсортированный,поиск,2,0.09873830401920713 +BST,отсортированный,удаление,2,0.10281848098384216 +BST,отсортированный,вставка,3,30.65343388498877 +BST,отсортированный,поиск,3,0.10266653398866765 +BST,отсортированный,удаление,3,0.11113363798358478 +BST,отсортированный,вставка,4,37.78820445598103 +BST,отсортированный,поиск,4,0.19725433399435133 +BST,отсортированный,удаление,4,0.20082367697614245 +BST,отсортированный,вставка,5,31.69466849300079 +BST,отсортированный,поиск,5,0.1048340730194468 +BST,отсортированный,удаление,5,0.10346844801097177 +BST,отсортированный,вставка,СРЕДНЕЕ,30.3116936835926 +BST,отсортированный,поиск,СРЕДНЕЕ,0.12068855820107274 +BST,отсортированный,удаление,СРЕДНЕЕ,0.12438100358704104 +BST,случайный,вставка,СРЕДНЕЕ,0.09542107380693779 +BST,случайный,поиск,СРЕДНЕЕ,0.0006170118111185729 +BST,случайный,удаление,СРЕДНЕЕ,0.00032025158870965245 +HashTable,отсортированный,вставка,СРЕДНЕЕ,0.00999923879862763 +HashTable,отсортированный,поиск,СРЕДНЕЕ,0.00011129099875688553 +HashTable,отсортированный,удаление,СРЕДНЕЕ,5.536700482480228e-05 +HashTable,случайный,вставка,СРЕДНЕЕ,0.012847578397486358 +HashTable,случайный,поиск,СРЕДНЕЕ,0.0001351810060441494 +HashTable,случайный,удаление,СРЕДНЕЕ,6.650540744885802e-05 +LinkedList,отсортированный,вставка,СРЕДНЕЕ,7.933764325204538 +LinkedList,отсортированный,поиск,СРЕДНЕЕ,0.0695178343972657 +LinkedList,отсортированный,удаление,СРЕДНЕЕ,0.04164563799276948 +LinkedList,случайный,вставка,СРЕДНЕЕ,8.891046419995837 +LinkedList,случайный,поиск,СРЕДНЕЕ,0.09509892339119688 +LinkedList,случайный,удаление,СРЕДНЕЕ,0.048641253600362686 diff --git a/VasilevIA/lab1/docs/Отчёт.md b/VasilevIA/lab1/docs/Отчёт.md new file mode 100644 index 0000000..0d251f9 --- /dev/null +++ b/VasilevIA/lab1/docs/Отчёт.md @@ -0,0 +1,62 @@ +# Лабораторная работа №1: Сравнительный анализ структур данных + +## 1. Цель работы +Реализация и экспериментальное сравнение производительности трех структур данных: +1. **Связный список (LinkedList)** +2. **Хеш-таблица (HashTable)** +3. **Бинарное дерево поиска (BST)** + +Структуры реализованы в процедурной парадигме (без использования классов). Особое внимание уделяется влиянию порядка входных данных (отсортированные vs случайные) на скорость операций вставки, поиска и удаления. + +## 2. Методика эксперимента + +* **Объем выборки:** $N = 10\,000$ записей (имя, телефон). +* **Режимы входных данных:** + * *Случайный (Shuffled)* — имена перемешаны. + * *Отсортированный (Sorted)* — имена идут по алфавиту. +* **Измеряемые метрики:** + * Время полной вставки $N$ элементов. + * Время 110 операций поиска (100 существующих + 10 несуществующих). + * Время 50 операций удаления. +* **Инструментарий:** Замеры выполнены через `time.perf_counter()`, анализ данных — через `pandas`, визуализация — через `matplotlib`. +* **Повторяемость:** Каждый тест запущен 5 раз для усреднения погрешности. + +## 3. Результаты +### 3.1. Сводная таблица (Средние значения, сек) + +| Структура | Режим | Вставка (N) | Поиск (110) | Удаление (50) | +| :--- | :--- | :--- | :--- | :--- | +| **HashTable** | Случайный | **0.011** | **0.0001** | **0.00006** | +| **HashTable** | Отсортированный | 0.010 | 0.0001 | 0.00006 | +| **BST** | Случайный | 0.049 | 0.0005 | 0.0003 | +| **BST** | Отсортированный | **29.91** | 0.093 | 0.106 | +| **LinkedList** | Случайный | 10.82 | 0.134 | 0.057 | +| **LinkedList** | Отсортированный | 6.79 | 0.059 | 0.035 | + +### 3.2. Визуализация +![График производительности](data/plot.png) +*(На графике ось Y логарифмическая. Это необходимо, так как диапазон времен составляет от $10^{-4}$ до $30$ секунд).* + +## 4. Анализ результатов +### 4.1. Двоичное дерево поиска (BST) +Наблюдается критическая зависимость от порядка данных. +* **Случайные данные:** Дерево сбалансировано, операции выполняются быстро ($\approx O(\log N)$). Время вставки — 0.05 сек. +* **Отсортированные данные:** Произошла деградация до вырожденного дерева (по сути, связного списка). Каждая вставка проходит до самого глубокого уровня. Время вставки составило **~30 секунд**. +* **Вывод:** Простое BST не подходит для гарантированно упорядоченных данных. Для реальных систем требуется балансировка (AVL, Red-Black Trees). + +### 4.2. Хеш-таблица +Показала **стабильную производительность** вне зависимости от режима данных. +* Время вставки $\approx 0.01$ сек. +* Время поиска $\approx 0.0001$ сек (в 1000 раз быстрее поиска в списке). +* Это подтверждает теоретическую сложность $O(1)$ (в среднем). Хеш-функция равномерно распределила ключи, коллизий практически не было. + +### 4.3. Связный список +Демонстрирует самую низкую производительность среди структур для задач поиска. +* Вставка в случайном порядке занимает больше времени (10.8 сек), чем в отсортированном (6.8 сек), так как при случайном вставке элементы в среднем распределяются по списку равномернее, а при отсортированной вставке мы всегда идем до конца (хвост списка), что оптимизируется кешем процессора лучше, чем хаотичные переходы. +* Поиск занимает $\approx 0.1$ сек ($O(N)$), что значительно медленнее хеш-таблицы. + +## 5. Итоговые выводы + +1. **Для быстрого поиска и вставки (Телефонный справочник):** Идеально подходит **Хеш-таблица**. Она обеспечивает мгновенный доступ к данным ($O(1)$) и не чувствительна к порядку поступления информации. +2. **Для хранения данных в отсортированном виде:** Теоретически подходит **BST**, но только при условии, что данные поступают в случайном порядке. Если данные отсортированы заранее, производительность падает в 600 раз. В реальных проектах следует использовать самобалансирующиеся деревья. +3. **Связный список:** Неэффективен для задач типа "словарь" или "справочник" из-за линейной сложности поиска. Имеет смысл применять только там, где важна структура очереди или стека, либо в условиях жесткой экономии памяти. diff --git a/VasilevIA/lab1/Задание1.py b/VasilevIA/lab1/Задание1.py new file mode 100644 index 0000000..cf145fd --- /dev/null +++ b/VasilevIA/lab1/Задание1.py @@ -0,0 +1,252 @@ +import random +import pandas as pd +import time +import sys +import os +import matplotlib.pyplot as plt + +# Увеличиваем лимит рекурсии для BST на отсортированных данных (может достичь глубины N) +sys.setrecursionlimit(20000) + +# ========================================================= +# 1. СВЯЗНЫЙ СПИСОК (LinkedListPhoneBook) +# ========================================================= +def ll_insert(head, name, phone): + if head is None: + return {'name': name, 'phone': phone, 'next': None} + + curr = head + while True: + if curr['name'] == name: + curr['phone'] = phone # Обновление существующей записи + break + if curr['next'] is None: + curr['next'] = {'name': name, 'phone': phone, 'next': None} + break + curr = curr['next'] + return head + +def ll_find(head, name): + curr = head + while curr: + if curr['name'] == name: + return curr['phone'] + curr = curr['next'] + return None + +def ll_delete(head, name): + if head is None: + return None + if head['name'] == name: + return head['next'] + + curr = head + while curr['next']: + if curr['next']['name'] == name: + curr['next'] = curr['next']['next'] + break + curr = curr['next'] + return head + +def ll_list_all(head): + res = [] + curr = head + while curr: + res.append((curr['name'], curr['phone'])) + curr = curr['next'] + res.sort(key=lambda x: x[0]) + return res + +# ========================================================= +# 2. ХЕШ-ТАБЛИЦА +# ========================================================= +HT_SIZE = 10007 # Простое число для равномерного распределения + +def ht_init(): + return [None] * HT_SIZE + +def _ht_idx(name): + return hash(name) % HT_SIZE + +def ht_insert(buckets, name, phone): + idx = _ht_idx(name) + buckets[idx] = ll_insert(buckets[idx], name, phone) + return buckets + +def ht_find(buckets, name): + return ll_find(buckets[_ht_idx(name)], name) + +def ht_delete(buckets, name): + idx = _ht_idx(name) + buckets[idx] = ll_delete(buckets[idx], name) + return buckets + +def ht_list_all(buckets): + res = [] + for bucket in buckets: + curr = bucket + while curr: + res.append((curr['name'], curr['phone'])) + curr = curr['next'] + res.sort(key=lambda x: x[0]) + return res + +# ========================================================= +# 3. ДВОИЧНОЕ ДЕРЕВО ПОИСКА (BST) +# ========================================================= +def bst_insert(root, name, phone): + 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 root + +def bst_find(root, name): + curr = root + while curr: + if name == curr['name']: + return curr['phone'] + elif name < curr['name']: + curr = curr['left'] + else: + curr = curr['right'] + return None + +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'] + if root['right'] is None: + return root['left'] + + # Два потомка: находим минимальный в правом поддереве + min_node = root['right'] + while min_node['left'] is not None: + min_node = min_node['left'] + + 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): + if root is None: + return [] + return bst_list_all(root['left']) + [(root['name'], root['phone'])] + bst_list_all(root['right']) + +# ========================================================= +# ЭКСПЕРИМЕНТАЛЬНАЯ ЧАСТЬ +# ========================================================= +def run_experiments(): + N = 10000 + RECORDS = [(f"User_{i:05d}", f"+7900{i:04d}{i%100:02d}") for i in range(N)] + + records_shuffled = RECORDS[:] + random.shuffle(records_shuffled) + + records_sorted = sorted(RECORDS, key=lambda x: x[0]) + + # Наборы для поиска и удаления + existing_names = [r[0] for r in random.sample(RECORDS, 100)] + non_existing_names = [f"None_{i}" for i in range(10)] + find_names = existing_names + non_existing_names + delete_names = [r[0] for r in random.sample(RECORDS, 50)] + + structures = { + "LinkedList": (lambda: None, ll_insert, ll_find, ll_delete), + "HashTable": (ht_init, ht_insert, ht_find, ht_delete), + "BST": (lambda: None, bst_insert, bst_find, bst_delete) + } + + modes = {"случайный": records_shuffled, "отсортированный": records_sorted} + results = [] + + print("Запуск экспериментов...") + trials = 5 + for struct_name, (init_f, ins_f, find_f, del_f) in structures.items(): + for mode_name, data in modes.items(): + print(f" {struct_name} | {mode_name}") + for t in range(1, trials + 1): + # Инициализация + ds = init_f() + + # A. Вставка + t0 = time.perf_counter() + for name, phone in data: + ds = ins_f(ds, name, phone) + t_ins = time.perf_counter() - t0 + + # B. Поиск + t0 = time.perf_counter() + for name in find_names: + find_f(ds, name) + t_find = time.perf_counter() - t0 + + # C. Удаление + t0 = time.perf_counter() + for name in delete_names: + ds = del_f(ds, name) + t_del = time.perf_counter() - t0 + + results.append([struct_name, mode_name, "вставка", t, t_ins]) + results.append([struct_name, mode_name, "поиск", t, t_find]) + results.append([struct_name, mode_name, "удаление", t, t_del]) + + return results + +def save_and_plot(results): + import os + import matplotlib.pyplot as plt + import pandas as pd + + os.makedirs("docs/data", exist_ok=True) + + # 1. Сохранение CSV (как было) + df = pd.DataFrame(results, columns=["Структура", "Режим", "Операция", "Повторение", "Время (сек)"]) + avg = df.groupby(["Структура", "Режим", "Операция"])["Время (сек)"].mean().reset_index() + avg["Повторение"] = "СРЕДНЕЕ" + df_full = pd.concat([df, avg], ignore_index=True) + df_full.to_csv("docs/data/results.csv", index=False, encoding="utf-8-sig") + + # 2. Улучшенный график: 3 отдельных подграфика + логарифмическая шкала + fig, axes = plt.subplots(1, 3, figsize=(18, 6)) + operations = ["вставка", "поиск", "удаление"] + structures_order = ["HashTable", "BST", "LinkedList"] # Фиксируем порядок для удобства чтения + colors = {"случайный": "#6C157F", "отсортированный": "#1E299F"} + + for ax, op in zip(axes, operations): + op_data = avg[avg["Операция"] == op] + pivot = op_data.pivot(index="Структура", columns="Режим", values="Время (сек)") + pivot = pivot.reindex(structures_order) # Ставим структуры в удобном порядке + + pivot.plot(kind="bar", ax=ax, color=[colors["случайный"], colors["отсортированный"]], width=0.75) + ax.set_title(f"Операция: {op.capitalize()}") + ax.set_ylabel("Время (сек)") + ax.set_xticklabels(ax.get_xticklabels(), rotation=0) + ax.grid(axis="y", alpha=0.3, linestyle="--") + + # ЛОГАРИФМИЧЕСКАЯ ШКАЛА: обязательна при разбросе от 0.0001 до 30 сек + ax.set_yscale("log") + ax.legend(title="Режим", loc="upper right") + + fig.suptitle("Сравнение производительности структур данных", fontsize=16, y=1.05) + plt.tight_layout() + plt.savefig("docs/data/plot.png", dpi=200, bbox_inches="tight") + +if __name__ == "__main__": + res = run_experiments() + save_and_plot(res) + print("Эксперимент завершен")