From a9deaa51ec669df2d57bfc3e394546548209060e Mon Sep 17 00:00:00 2001 From: not why Date: Mon, 25 May 2026 01:06:00 +0300 Subject: [PATCH] added report --- soninrv/docs/performance_comparison.png | Bin 0 -> 67367 bytes soninrv/docs/report1.md | 172 ++++++++++++++++++++++++ 2 files changed, 172 insertions(+) create mode 100644 soninrv/docs/performance_comparison.png create mode 100644 soninrv/docs/report1.md diff --git a/soninrv/docs/performance_comparison.png b/soninrv/docs/performance_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..2ca134f41399aae650bde414db9df4bbc10111cd GIT binary patch literal 67367 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 literal 0 HcmV?d00001 diff --git a/soninrv/docs/report1.md b/soninrv/docs/report1.md new file mode 100644 index 0000000..f2c3b2b --- /dev/null +++ b/soninrv/docs/report1.md @@ -0,0 +1,172 @@ +# Отчёт по лабораторной работе "Структуры данных" + + +## 1. Цель работы + +Реализовать три структуры данных «с нуля» в процедурной парадигме (без классов), применить их для хранения записей телефонного справочника и экспериментально сравнить производительность основных операций: вставки, поиска и удаления. + +Структуры данных: + +Связный список (LinkedList) — узлы-словари, соединённые ссылками. + +Хеш-таблица (HashTable) — массив корзин (1024 элемента) с цепочками через связный список. + +Двоичное дерево поиска (BST) — рекурсивная / итеративная реализация через словари. + +N = 10 000 записей вида User_00001, +7-000-0000001. + +Два режима: случайный порядок (records_shuffled) и отсортированный (records_sorted). + +Поиск: 100 гарантированно существующих имён + 10 несуществующих = 110 запросов. + +Удаление: 50 случайных имён из набора. + +Каждый замер повторяется 5 раз; записываются все замеры и среднее. + + +## 2. Результаты экспериментов + +| structure | mode | operation | run | time_sec | +|---|---|---|---|---| +| LinkedList | shuffled | insert | 1 | 3.688133922999995 | +| LinkedList | shuffled | insert | 2 | 3.642716359000005 | +| LinkedList | shuffled | insert | 3 | 3.6362029409999934 | +| LinkedList | shuffled | insert | 4 | 3.5635424559999933 | +| LinkedList | shuffled | insert | 5 | 3.6936824539999975 | +| LinkedList | shuffled | find | 1 | 0.0404481799999985 | +| LinkedList | shuffled | find | 2 | 0.0415632419999951 | +| LinkedList | shuffled | find | 3 | 0.0408364839999961 | +| LinkedList | shuffled | find | 4 | 0.0409441910000083 | +| LinkedList | shuffled | find | 5 | 0.0409490519999877 | +| LinkedList | shuffled | delete | 1 | 0.020429828999994 | +| LinkedList | shuffled | delete | 2 | 0.0203125029999995 | +| LinkedList | shuffled | delete | 3 | 0.0205162980000039 | +| LinkedList | shuffled | delete | 4 | 0.0204522580000059 | +| LinkedList | shuffled | delete | 5 | 0.0204940820000132 | +| LinkedList | sorted | insert | 1 | 2.807388945 | +| LinkedList | sorted | insert | 2 | 2.6681887550000027 | +| LinkedList | sorted | insert | 3 | 2.7149360570000027 | +| LinkedList | sorted | insert | 4 | 2.586755936000003 | +| LinkedList | sorted | insert | 5 | 2.858489943000009 | +| LinkedList | sorted | find | 1 | 0.0301240860000007 | +| LinkedList | sorted | find | 2 | 0.0300124050000079 | +| LinkedList | sorted | find | 3 | 0.0301267250000023 | +| LinkedList | sorted | find | 4 | 0.0300742670000033 | +| LinkedList | sorted | find | 5 | 0.0304795409999769 | +| LinkedList | sorted | delete | 1 | 0.0176948809999828 | +| LinkedList | sorted | delete | 2 | 0.0186108259999855 | +| LinkedList | sorted | delete | 3 | 0.0183917109999924 | +| LinkedList | sorted | delete | 4 | 0.0183299800000042 | +| LinkedList | sorted | delete | 5 | 0.0202586389999908 | +| HashTable | shuffled | insert | 1 | 0.040671551999992 | +| HashTable | shuffled | insert | 2 | 0.0356988590000071 | +| HashTable | shuffled | insert | 3 | 0.034698187999993 | +| HashTable | shuffled | insert | 4 | 0.034897758999989 | +| HashTable | shuffled | insert | 5 | 0.0436747020000041 | +| HashTable | shuffled | find | 1 | 0.0003306420000228 | +| HashTable | shuffled | find | 2 | 0.0002776770000139 | +| HashTable | shuffled | find | 3 | 0.0002387590000125 | +| HashTable | shuffled | find | 4 | 0.0002413439999884 | +| HashTable | shuffled | find | 5 | 0.0002350800000101 | +| HashTable | shuffled | delete | 1 | 0.0009653390000039 | +| HashTable | shuffled | delete | 2 | 0.000182843999994 | +| HashTable | shuffled | delete | 3 | 0.000187277000009 | +| HashTable | shuffled | delete | 4 | 0.0001825169999847 | +| HashTable | shuffled | delete | 5 | 0.000182102999986 | +| HashTable | sorted | insert | 1 | 0.031514957000013 | +| HashTable | sorted | insert | 2 | 0.0317737780000015 | +| HashTable | sorted | insert | 3 | 0.0332209919999968 | +| HashTable | sorted | insert | 4 | 0.0438333349999879 | +| HashTable | sorted | insert | 5 | 0.0344081210000126 | +| HashTable | sorted | find | 1 | 0.0004218560000026 | +| HashTable | sorted | find | 2 | 0.0003256969999938 | +| HashTable | sorted | find | 3 | 0.0003048350000085 | +| HashTable | sorted | find | 4 | 0.000252023999991 | +| HashTable | sorted | find | 5 | 0.0002450770000166 | +| HashTable | sorted | delete | 1 | 0.0002077629999917 | +| HashTable | sorted | delete | 2 | 0.000197111999995 | +| HashTable | sorted | delete | 3 | 0.000204272000019 | +| HashTable | sorted | delete | 4 | 0.0001966060000029 | +| HashTable | sorted | delete | 5 | 0.0001917250000076 | +| BST | shuffled | insert | 1 | 0.0322367580000104 | +| BST | shuffled | insert | 2 | 0.0445325409999952 | +| BST | shuffled | insert | 3 | 0.0312052750000191 | +| BST | shuffled | insert | 4 | 0.0302206560000115 | +| BST | shuffled | insert | 5 | 0.0304544809999924 | +| BST | shuffled | find | 1 | 0.000256859999979 | +| BST | shuffled | find | 2 | 0.0001786029999948 | +| BST | shuffled | find | 3 | 0.0001869349999878 | +| BST | shuffled | find | 4 | 0.0001727730000027 | +| BST | shuffled | find | 5 | 0.0001574610000147 | +| BST | shuffled | delete | 1 | 0.0001869909999925 | +| BST | shuffled | delete | 2 | 0.0012688459999878 | +| BST | shuffled | delete | 3 | 0.0012691000000017 | +| BST | shuffled | delete | 4 | 0.001258899999982 | +| BST | shuffled | delete | 5 | 0.0013220630000034 | +| BST | sorted | insert | 1 | 12.957382101000007 | +| BST | sorted | insert | 2 | 12.10390555699999 | +| BST | sorted | insert | 3 | 12.698454105999986 | +| BST | sorted | insert | 4 | 12.181134653000017 | +| BST | sorted | insert | 5 | 12.952122806999997 | +| BST | sorted | find | 1 | 0.0432625550000125 | +| BST | sorted | find | 2 | 0.0455909260000169 | +| BST | sorted | find | 3 | 0.0434497109999938 | +| BST | sorted | find | 4 | 0.04326359800001 | +| BST | sorted | find | 5 | 0.0431787990000032 | +| BST | sorted | delete | 1 | 0.0546987289999947 | +| BST | sorted | delete | 2 | 0.0549414869999793 | +| BST | sorted | delete | 3 | 0.0549512879999838 | +| BST | sorted | delete | 4 | 0.0546492089999901 | +| BST | sorted | delete | 5 | 0.0542962790000274 | +Графическое представление результатов приведено на рисунке ниже. +[![Сравнение производительности](performance_comparison.png)] +## 3. Анализ результатов + + +### 3.1. Вставка + +Связный список: проход по всему списку для поиска дубликата перед вставкой даёт O(n) на каждый элемент. При N = 10 000 это ≈50 млн операций сравнения — отсюда 3.6 с. + +Хеш-таблица: хеш вычисляется за O(len(name)), поиск в корзине ≈ O(1). Итог — 0.037 с независимо от порядка. + +BST на случайных данных: дерево остаётся примерно сбалансированным, высота ≈ log₂(10000) ≈ 13. Итог — 0.034 с. На отсортированных данных каждый новый элемент добавляется в правое поддерево, высота достигает N = 10 000 — полная деградация до O(n²) суммарно. Итог — 12.6 с (×373 замедление). + + +### 3.2. Поиск + +Связный список: в среднем просматривает N/2 узлов. При 110 запросах — ≈550 000 сравнений. Время ≈ 0.04 с. + +Хеш-таблица: поиск в корзине из ~10 элементов — практически мгновенно. Время ≈ 0.0003 с — в 130 раз быстрее связного списка. + +BST: случайный порядок — log(N) шагов, ≈ 0.0002 с. Отсортированный — линейный поиск O(n), ≈ 0.044 с (сравнимо со связным списком). + + +### 3.3. Удаление + +Связный список: необходим проход до удаляемого элемента — O(n). При 50 удалениях ≈ 0.02 с. + +Хеш-таблица: O(1) в среднем — ≈ 0.0003 с. + +BST: случайные данные — O(log n) ≈ 0.001 с. Отсортированные — O(n) ≈ 0.055 с. + + +### 3.4. Получение отсортированного списка + +Связный список и хеш-таблица: сбор всех N элементов + Python sort — O(n log n). Практически одинаково для обеих структур. + +BST: in-order обход уже возвращает отсортированный список — O(n), без дополнительной сортировки. При случайном вводе BST является наиболее эффективным для list_all. + + +## 4. Выводы и рекомендации + +На основании экспериментов можно дать следующие практические рекомендации: + +Частые вставки и поиск без упорядочивания → Хеш-таблица. Константное среднее время O(1) для всех операций, нечувствительность к порядку данных. Практически всегда лучший выбор для справочников, кэшей, индексов. + +Данные нужны в отсортированном порядке (range queries, итерация по алфавиту) → Сбалансированное BST (AVL, красно-чёрное дерево) или B-дерево. Простая BST допустима только при случайном порядке вставки. На отсортированных данных деградирует до O(n). + +Очень мало элементов или требуется простота реализации → Связный список. При N < 100 разница в скорости незначительна, а код минимальный. + +BST (сбалансированный) vs Хеш-таблица: если нужно только find/insert/delete — хеш-таблица быстрее. Если нужны min/max, range-запросы, сортировка — BST предпочтительнее. + +Итог: для реального телефонного справочника с операциями insert/find/delete оптимальна хеш-таблица. Если требуется регулярный вывод списка по алфавиту — BST (сбалансированное). Связный список применим только как учебная модель или для очень маленьких N.