From 666bc0af37c93017108e0c182682d9dec6e5c681 Mon Sep 17 00:00:00 2001 From: SobolevNS Date: Fri, 22 May 2026 12:18:09 +0300 Subject: [PATCH 1/5] add ll, ht and bst --- .../data/task1_data_structures/phonebook.py | 267 ++++++++++++++++++ 1 file changed, 267 insertions(+) create mode 100644 SobolevNS/docs/data/task1_data_structures/phonebook.py diff --git a/SobolevNS/docs/data/task1_data_structures/phonebook.py b/SobolevNS/docs/data/task1_data_structures/phonebook.py new file mode 100644 index 0000000..a9b9185 --- /dev/null +++ b/SobolevNS/docs/data/task1_data_structures/phonebook.py @@ -0,0 +1,267 @@ +""" +phonebook.py +Три структуры данных для хранения телефонного справочника, +реализованные в процедурной парадигме (без классов). + +Узлы и контейнеры представляются обычными словарями и списками. +""" +import sys + +# Увеличиваем лимит рекурсии - нужно для BST в худшем случае +sys.setrecursionlimit(200_000) + + +# ============================================================ +# 1. СВЯЗНЫЙ СПИСОК +# Узел: {'name': str, 'phone': str, 'next': dict|None} +# Голова списка - это либо узел, либо None (пустой список) +# ============================================================ + +def ll_create(): + """Создаёт пустой связный список.""" + return None + + +def ll_insert(head, name, phone): + """Вставляет или обновляет запись. Возвращает новую голову списка.""" + # Если списка нет - создаём первый узел + if head is None: + return {'name': name, 'phone': phone, 'next': None} + + # Если совпадение в голове - просто обновляем телефон + node = head + while node is not None: + if node['name'] == name: + node['phone'] = phone + return head + if node['next'] is None: + break + node = node['next'] + + # node - последний узел, добавляем после него + node['next'] = {'name': name, 'phone': phone, 'next': None} + return head + + +def ll_find(head, name): + """Возвращает phone или None.""" + node = head + while node is not None: + if node['name'] == name: + return node['phone'] + node = node['next'] + return None + + +def ll_delete(head, name): + """Удаляет узел по имени. Возвращает новую голову (она могла измениться).""" + if head is None: + return None + + # Удаление головы + if head['name'] == name: + return head['next'] + + prev = head + cur = head['next'] + while cur is not None: + if cur['name'] == name: + prev['next'] = cur['next'] + return head + prev = cur + cur = cur['next'] + # Не нашли - игнорируем + return head + + +def ll_collect(head): + """Возвращает несортированный список (name, phone) - служебная функция.""" + out = [] + node = head + while node is not None: + out.append((node['name'], node['phone'])) + node = node['next'] + return out + + +def ll_list_all(head): + """Возвращает все записи, отсортированные по имени.""" + items = ll_collect(head) + items.sort(key=lambda x: x[0]) + return items + + +# ============================================================ +# 2. ХЕШ-ТАБЛИЦА +# buckets - список фиксированной длины из голов связных списков +# ============================================================ + +def ht_create(size=1024): + """Создаёт пустую хеш-таблицу с заданным числом бакетов.""" + return { + 'size': size, + 'buckets': [None] * size, + } + + +def _ht_index(name, size): + """Хеш-функция: встроенный hash + остаток от деления.""" + return hash(name) % size + + +def ht_insert(ht, name, phone): + """Вставляет или обновляет запись в нужном бакете.""" + idx = _ht_index(name, ht['size']) + ht['buckets'][idx] = ll_insert(ht['buckets'][idx], name, phone) + + +def ht_find(ht, name): + """Возвращает phone или None.""" + idx = _ht_index(name, ht['size']) + return ll_find(ht['buckets'][idx], name) + + +def ht_delete(ht, name): + """Удаляет запись (если она есть).""" + idx = _ht_index(name, ht['size']) + ht['buckets'][idx] = ll_delete(ht['buckets'][idx], name) + + +def ht_list_all(ht): + """Собирает все записи из всех бакетов и сортирует по имени.""" + out = [] + for head in ht['buckets']: + out.extend(ll_collect(head)) + out.sort(key=lambda x: x[0]) + return out + + +# ============================================================ +# 3. ДВОИЧНОЕ ДЕРЕВО ПОИСКА +# Узел: {'name': str, 'phone': str, 'left': dict|None, 'right': dict|None} +# Корень - узел или None +# ============================================================ + +def bst_create(): + """Создаёт пустое BST.""" + return None + + +def bst_insert(root, name, phone): + """Вставляет/обновляет. Итеративная реализация, чтобы не упереться в рекурсию + при отсортированном входе. Возвращает новый корень.""" + new_node = {'name': name, 'phone': phone, 'left': None, 'right': None} + + if root is None: + return new_node + + cur = root + while True: + if name == cur['name']: + cur['phone'] = phone + return root + if name < cur['name']: + if cur['left'] is None: + cur['left'] = new_node + return root + cur = cur['left'] + else: + if cur['right'] is None: + cur['right'] = new_node + return root + cur = cur['right'] + + +def bst_find(root, name): + """Возвращает phone или None. Итеративный поиск.""" + cur = root + while cur is not None: + if name == cur['name']: + return cur['phone'] + cur = cur['left'] if name < cur['name'] else cur['right'] + return None + + +def _bst_min_node(node): + """Возвращает узел с минимальным ключом в поддереве.""" + while node['left'] is not None: + node = node['left'] + return node + + +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'] + # Двое детей: берём преемника (мин. в правом поддереве) + 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): + """Центрированный обход (in-order) - сразу даёт отсортированный по имени список. + Итеративный, чтобы не упасть на вырожденном дереве.""" + out = [] + stack = [] + cur = root + while cur is not None or stack: + while cur is not None: + stack.append(cur) + cur = cur['left'] + cur = stack.pop() + out.append((cur['name'], cur['phone'])) + cur = cur['right'] + return out + + +# ============================================================ +# Маленький self-test, запускается только при прямом вызове +# ============================================================ +if __name__ == "__main__": + data = [("Alice", "111"), ("Bob", "222"), ("Charlie", "333"), + ("Dave", "444"), ("Eve", "555")] + + # LinkedList + head = ll_create() + for n, p in data: + head = ll_insert(head, n, p) + assert ll_find(head, "Bob") == "222" + assert ll_find(head, "Nope") is None + head = ll_delete(head, "Bob") + assert ll_find(head, "Bob") is None + assert ll_list_all(head) == sorted([(n, p) for n, p in data if n != "Bob"]) + + # HashTable + ht = ht_create(size=8) + for n, p in data: + ht_insert(ht, n, p) + assert ht_find(ht, "Charlie") == "333" + ht_delete(ht, "Charlie") + assert ht_find(ht, "Charlie") is None + assert ht_list_all(ht) == sorted([(n, p) for n, p in data if n != "Charlie"]) + + # BST + root = bst_create() + for n, p in data: + root = bst_insert(root, n, p) + assert bst_find(root, "Dave") == "444" + root = bst_delete(root, "Dave") + assert bst_find(root, "Dave") is None + assert bst_list_all(root) == sorted([(n, p) for n, p in data if n != "Dave"]) + + print("phonebook.py: все самопроверки пройдены") From 2ff608b88f42f3127066798fd9e72898d11bee6d Mon Sep 17 00:00:00 2001 From: SobolevNS Date: Fri, 22 May 2026 12:20:40 +0300 Subject: [PATCH 2/5] add experiment.py --- .../data/task1_data_structures/experiment.py | 194 ++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 SobolevNS/docs/data/task1_data_structures/experiment.py diff --git a/SobolevNS/docs/data/task1_data_structures/experiment.py b/SobolevNS/docs/data/task1_data_structures/experiment.py new file mode 100644 index 0000000..1e4ce39 --- /dev/null +++ b/SobolevNS/docs/data/task1_data_structures/experiment.py @@ -0,0 +1,194 @@ +""" +experiment.py + +Замеры производительности трёх структур данных на одних и тех же данных: + LinkedList, HashTable, BST +в двух режимах: + случайный порядок (shuffled), отсортированный порядок (sorted) +для трёх операций: + insert N записей, find 110 раз, delete 50 раз +Каждый эксперимент повторяется TRIALS раз. Сохраняем все замеры + средние +в CSV. Для BST на отсортированных данных снижаем N - иначе эксперимент +длится десятки минут (вырожденное дерево, O(N^2) вставка). +""" + +import csv +import os +import random +import time + +import phonebook as pb + + +# ---------- параметры эксперимента ---------- +N = 10_000 # число записей в основном эксперименте +N_BST_SORTED = 2_000 # для BST на отсортированных данных - меньше (O(N^2)) +TRIALS = 5 # количество повторов каждого замера +N_FIND_EXISTING = 100 +N_FIND_MISSING = 10 +N_DELETE = 50 +HT_SIZE = 2048 # размер хеш-таблицы +RNG_SEED = 42 +OUT_CSV = os.path.join("docs", "data", "results.csv") +# -------------------------------------------- + + +def gen_records(n): + """Генерирует n записей вида ('User_00001', '555-0001-...').""" + return [(f"User_{i:05d}", f"555-{i:07d}") for i in range(n)] + + +def pick_keys(records, k_exist, k_miss, rng): + """Выбирает k_exist существующих имён и k_miss отсутствующих.""" + existing = [name for name, _ in rng.sample(records, k_exist)] + missing = [f"None_{i}" for i in range(k_miss)] + return existing + missing + + +# ---------- замеры по структурам ---------- + +def measure_linked_list(records, find_keys, delete_keys): + # вставка + t0 = time.perf_counter() + head = pb.ll_create() + for name, phone in records: + head = pb.ll_insert(head, name, phone) + t_insert = time.perf_counter() - t0 + + # поиск + t0 = time.perf_counter() + for name in find_keys: + pb.ll_find(head, name) + t_find = time.perf_counter() - t0 + + # удаление + t0 = time.perf_counter() + for name in delete_keys: + head = pb.ll_delete(head, name) + t_delete = time.perf_counter() - t0 + + return t_insert, t_find, t_delete + + +def measure_hash_table(records, find_keys, delete_keys): + t0 = time.perf_counter() + ht = pb.ht_create(size=HT_SIZE) + for name, phone in records: + pb.ht_insert(ht, name, phone) + t_insert = time.perf_counter() - t0 + + t0 = time.perf_counter() + for name in find_keys: + pb.ht_find(ht, name) + t_find = time.perf_counter() - t0 + + t0 = time.perf_counter() + for name in delete_keys: + pb.ht_delete(ht, name) + t_delete = time.perf_counter() - t0 + + return t_insert, t_find, t_delete + + +def measure_bst(records, find_keys, delete_keys): + t0 = time.perf_counter() + root = pb.bst_create() + for name, phone in records: + root = pb.bst_insert(root, name, phone) + t_insert = time.perf_counter() - t0 + + t0 = time.perf_counter() + for name in find_keys: + pb.bst_find(root, name) + t_find = time.perf_counter() - t0 + + t0 = time.perf_counter() + for name in delete_keys: + root = pb.bst_delete(root, name) + t_delete = time.perf_counter() - t0 + + return t_insert, t_find, t_delete + + +# ---------- запуск ---------- + +def run_one(structure_name, mode, n, rng_seed): + """Готовит данные, прогоняет TRIALS раз и возвращает список (insert, find, delete).""" + base_records = gen_records(n) + + runs = [] + for trial in range(TRIALS): + # отдельный rng для воспроизводимости и независимости попыток + rng = random.Random(rng_seed + trial) + + if mode == "shuffled": + records = base_records[:] + rng.shuffle(records) + elif mode == "sorted": + records = sorted(base_records, key=lambda x: x[0]) + else: + raise ValueError(mode) + + find_keys = pick_keys(records, N_FIND_EXISTING, N_FIND_MISSING, rng) + delete_keys = [name for name, _ in rng.sample(records, N_DELETE)] + + if structure_name == "LinkedList": + r = measure_linked_list(records, find_keys, delete_keys) + elif structure_name == "HashTable": + r = measure_hash_table(records, find_keys, delete_keys) + elif structure_name == "BST": + r = measure_bst(records, find_keys, delete_keys) + else: + raise ValueError(structure_name) + + runs.append(r) + return runs + + +def main(): + os.makedirs(os.path.dirname(OUT_CSV), exist_ok=True) + + rows = [["Структура", "Режим", "Операция", "N", "Trial", "Время (сек)"]] + summary = [] # (structure, mode, op, n, mean, all_trials) + + configs = [ + ("LinkedList", "shuffled", N), + ("LinkedList", "sorted", N), + ("HashTable", "shuffled", N), + ("HashTable", "sorted", N), + ("BST", "shuffled", N), + ("BST", "sorted", N_BST_SORTED), # вырожденный случай + ] + + for structure, mode, n in configs: + print(f"==> {structure:10s} | {mode:9s} | N={n}") + runs = run_one(structure, mode, n, RNG_SEED) + # runs = [(insert, find, delete), ...] + ops = ["insert", "find", "delete"] + for op_idx, op in enumerate(ops): + vals = [r[op_idx] for r in runs] + mean = sum(vals) / len(vals) + for trial_idx, v in enumerate(vals): + rows.append([structure, mode, op, n, trial_idx + 1, f"{v:.6f}"]) + summary.append((structure, mode, op, n, mean, vals)) + print(f" {op:7s}: mean={mean*1000:.3f} ms " + f"runs={[f'{v*1000:.3f}' for v in vals]}") + + # сводная строка со средними + rows.append([]) + rows.append(["--- СРЕДНИЕ ---"]) + rows.append(["Структура", "Режим", "Операция", "N", + "Среднее (сек)", "Все замеры (сек)"]) + for s, mode, op, n, mean, vals in summary: + rows.append([s, mode, op, n, f"{mean:.6f}", + ";".join(f"{v:.6f}" for v in vals)]) + + with open(OUT_CSV, "w", newline="", encoding="utf-8") as f: + writer = csv.writer(f) + writer.writerows(rows) + + print(f"\nГотово. Результаты записаны в {OUT_CSV}") + + +if __name__ == "__main__": + main() From 5827416a2b2140e44b9c84dbf49afad707773182 Mon Sep 17 00:00:00 2001 From: SobolevNS Date: Fri, 22 May 2026 12:22:08 +0300 Subject: [PATCH 3/5] add plots --- .../docs/data/plots/bst_degradation.png | Bin 0 -> 40927 bytes .../docs/data/plots/delete_compare.png | Bin 0 -> 43342 bytes .../docs/data/plots/find_compare.png | Bin 0 -> 41902 bytes .../docs/data/plots/insert_compare.png | Bin 0 -> 43936 bytes .../docs/data/results.csv | 112 +++++++++++++++++ .../task1_data_structures/plot_results.py | 118 ++++++++++++++++++ 6 files changed, 230 insertions(+) create mode 100644 SobolevNS/docs/data/task1_data_structures/docs/data/plots/bst_degradation.png create mode 100644 SobolevNS/docs/data/task1_data_structures/docs/data/plots/delete_compare.png create mode 100644 SobolevNS/docs/data/task1_data_structures/docs/data/plots/find_compare.png create mode 100644 SobolevNS/docs/data/task1_data_structures/docs/data/plots/insert_compare.png create mode 100644 SobolevNS/docs/data/task1_data_structures/docs/data/results.csv create mode 100644 SobolevNS/docs/data/task1_data_structures/plot_results.py diff --git a/SobolevNS/docs/data/task1_data_structures/docs/data/plots/bst_degradation.png b/SobolevNS/docs/data/task1_data_structures/docs/data/plots/bst_degradation.png new file mode 100644 index 0000000000000000000000000000000000000000..0b6a049e31aeb4735bb802f7181310c644b3b997 GIT binary patch literal 40927 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%0D)IID7Jl}P9NXM z77SwD?6#fu_z}XW^~2sjPgtv+bDLCs(e#Xq8H(~TguZkfy!q-nQk(kjc{`$&54})3 zLs%5F#vP~@2dh{*2gp!tqx@=%5rl;cSN4*B8zKHy=W7GN74NPS;|t@I=7_9<%>LtB zR-mLkIy8>&{QUA99-1Sij(k)bFjc_`pCIOd0VV2AZEC9;M&^BLc1&AVpCu?4v>=jns`b*rX?wkHFA^5piiW)I|3EJiJv0l*`yIMNI7P zaau|tB4tpaP$%48xUP3`2#jPORx@sVLwqGUR~q1En~}!YZ`Sx5`JewtIADBpanth{}ra@lr#8J!+$mJk@4Gb`o#56aImO04dZ_TuZYBmhT zHITWVgh#}F6H2YnEPX+IW?6`aQLLubHVNl+-kn*h z{nbyNbQUAmQDb9D%YJ4`3O-VqiPy1*(B281#aNU-DNsDMRg&b;I#b;4|LyU?bH?t9 zq@Ingjzor1qpU>X+U;Sn6s&5#<14d0CVeS=D{t>@YdOD@UA$W9Fl64-#ZX!g1`=QN z!Y$+sEZP1-2}vNSF|~(v{?A(N(%Af@?m$V4UWYd3MZ0%iI7sHf*H_c~RRg73dM{k|YR= z;%i2}Xp9rN!>RUeDL`1GGaA#zXO#b$$=?AChhYnkSrgE@Lmk=8wC}ey;HhAmN5KPg z;ZRej#7`&`h=B;jdj^Sm$L)9aEJ*hm2L$m@(&?25mabsWYpRh+2T!1{lA_2sa2Fn{bqh zDYSVP_RbH zcluGei>NeY)tLu6I>d#P_930eLB~{=X{56?b>U>zwo@NAd~}Ti6ftRN51r9?8f54y zUzzrgC;-Zj(xi9@k4DX4y`|8R9q!z$cpltkJsa?w`oupsE6(i;4-K_Y?P|v?LsN4l|feaYa;tXwrK6p*BUY_@2gF0WmVi!FVh`L0d6P;;9%9(HF z>ud91gy@>+%tZll=($Jg0Z)%#U%uKQ7=?R5i){%2RW#fqR}trEU~6mZ>G|_D2AiwV zbAVC7z#lA(%h2w*q`1*EG@fq7VaRAm1ng`lBfyO)g%~)~S816=k79NMdp7_SsZ*Vn zPDILCkeoV7Ww?OW0BTeVG>Pcb^OJh|s3(EYJn`|K;)3xV*WdsOz$s^-q@=_F2&U{i zWp)Uc8Wne60%hLD9j-0ZW7+BoAg1N*R<=U=a!?8A7TG}J9}}l!$6S#Y1p1(o#yBA1 zSfJQD!V4Eb#X|*w_a3IeJS1#GKiU@&0w&@-pHv+YIfl+}sR!D-;*QNsml zU}F|`*dlT~UiG6Ejphc7r(sN z;$+&&W~6Gh7tZrp?QOzP?c_v2K<*z4Zr~Qme)sNz9#*&;TI!nn-=;(NhRAN^-v)AO z1SP~M+mFat(8l8Jh+*1n{X}6w>pJce6jo}FJxV=Ua za1+--X1M!&OJTRm^b5TDkc%$no5LW0yACalhE`!&-1`{c#Hc-|94E$$uF?pL`&BR6 zm%x^V#vS=hG%wbVanGTRFxmzBSC38z^r&ZeilY2T(D(0zxWM*1fonUj?xfR@LAb4K zw@_sp1qMbz*G!OmC7OD&6+{M|tE*rV6&?C9wlV~VnFC8!72t2?2&E!SbToM;Wk*W^ z#+QxC9YpQJSdIXG!@Q3n`T{Vz3J|QDfd}Y>l1wo03H>>cK}LZ|F1(-H4?IRGt-KE( z-%NRoU;%H8xGRDJIJHGPuH9p-C4B4dRE^7HHrvT2lCJBugYK{wI+urSt>Ozo^R4@W znr?7z9MlMvH^=aEh5doK2=4WWqHyyp>X0_pY@~5gW-bl1leAh+nSac98dI}~jCa?? zOdzVSwytjQ!6sR4Ms~8=1<@FIGESf+OO^wI&p>rdNQI~!igv%FSB+B zBO|1fq8B{%i0n^^?1z|J3sv&sR6kbTfsU>c@5Jk@8~51cQ`xr0fzyGedo*@Ay1KgB zhMzT8{ssAuWmUpTqn?h|=HLgmMGwg$a{nY%Eak)Z&*}}as4^wwdvrzmGHV1!tMftQ!pUt3q_=4yz+B*O$Q zs|eeoR9@Vx)7S69T9H&%#)%H>>Ep6DALUcJl|leS~t@J$q5g~tyv3b7er}HKnM``qyuIK zP;G4cuRElTNCc0s^QL~N_AHPxYq=mMroyugC=bN_+CUHQ3}>Qk&;q?LU68PS3B+63 zfX7h8^M{k@fI@X3$1!Oc$jQam1alMKY~ZFoW|>5kYC(a*6o+(Ti3tfhiyrrwL|y}u z-S)FEqzigesYyG4krxhaZPhU-evXDg3pf-UntdI>%`U?&Z|Ws&`r&sy zUs5U?u*8Fa3g94V{1)4mm<{B z7XYDV2^<=~lvEG0{DbB4rS))1ln#>Mv4Q0tLG0-ATaN)_$$#=>wd!9CGu*;dB5}jq z4ld&P#*4cUYKm;b(CgYD5gY{FuID0)`9Hp(Bl{>6*l5lc3L9MpB?R_+%1+1M4xo!0 zb3J9IqNydvT%`+E$no)UbbNG7-1ev&oq+B5HJFPsJXSv3+bRALbN%OC^R*%ysvE@b zxr09!%S^Tx?Y$k(0buGp)ZF@phKB#RMI@@<424_UK&rOw#{jrNJ0YX9dlrtN3v5_l z{Q4U=hE@8UU=<^tBpH}>ParHD&#CK>PG!EoovpQ zz<9+c0_)4*{j%3Cgf^;1_3KY&HD)_QAQY+Y*b}?ZOD#w4n1Y0E{H*K7FJ7Ev-*{*m zzmt`|h(U3M@;N6!(#L-&S#t)}9S}^C4`nZ#kmXZ!Nz?qZHh$r_BZdqWb(hbk%}6J( zpV8L_mN(>pMVwndMG~%Y4a~~KHi|(M1Cqet;mOIQ{mi*IZv7D4>%Erp^73ez?E=Oj z1CnT*A@Y?1)$0VD3ldlZiesh`_4fGj@5Mm*TD$K>$4vLhxNi}LJ9VIT1<`)X-WU~d z)O%uO-vAsRBADE)z`p2cRJHAxS29-5bcO?s7mi41CQYN5&d@(+nDN zFv2S8_(fk|-x6-|!S%`29>|wqthF#VhpoT>Z})TYkA2+#U@=A2@-GcQ4_bg?rnUtF z_EH4MZ^decngayIqY#Vim*;LO@S%FKt*TvA3{U`<(gyT4vd_1(lfSAuC5xhtU^0i1 zC!z@0_0Esaj`dI>Wv&2P`;%_Z(ILfrqpyav^)~0A0Fw=2Ly6}p^zTA76%Mcmks^<8 zyz0!{ua(aDUuV-dZs>o3egA*u_11DQjTJ@=xV9lUwx@`M{PX#s=cZg{MJHuXAkbAv zn31FwX@%B~RoLT^VY>@;Fp=}D& z=)In5pp_Dgk&r%geIpD81P5@}^A6=ey#wo2fkCviC)_X=ZKdum#UNbg2cP7PH_W`c z9VplXhT8E(7m#(0Iw9g54_V`cAMWUVW26z5lz11yoTKJoiwACUZ{Y-t4!U+s;qhx! z*T82Au-F5q8@VyyGp0G7PO~+?sehH`xv}>#859X0`BzCVTN8k}yUQWNG!K*zVPO~i zynnqJa9gu?Kh#J<4+>B81e~!aFT88Gll6hQqQPSM*Y!ssi288ZUH%(tP{aSWQG^pup3u4F{j=+3e5RSF6lqV4;(4%zD;HJE(81UTK%XSdmO^2EQ<`fJ$~=@KfPk$`br$ zFEz8yE7yExRBq>b5y6=gY?ai*$8UBJbEP<@GW~e)jZy9+wew2ugzUA58=bf#D!VQh z%PS0&1**B@-D(-5MR^Sd*Z9?}Z4%P2+ z2Mt<$W(Hj2l)?Rp!UZ{uI2HqiPQ!u*#ui@P_w{^r1+5yXAqi%NN`|>Ud5-CPTp4b- zWD7$jD;-Mg*;<}D|Ci2g2C)$}eB?*Xj=V|OAiLC|=kpZO?j^M)o)S+->~L|-hN%u% zO5WKo-TE!SjM)ng?;tg6EpOv+8yY~qQ>sY*8Pr$wiwT@-PWszocj`HRT@hUewjC9^x z(-I&><-$Z|4wQj9*)wX>o{-6RE%U&v)wUD`j=Jf-qI_1?J{R9CKxmf>b9UR|BISR% z*eN6N{-f?W_4c>7)?bZ(diu-VHey;AE?g#Ox+s68_VzYo7Hh(*_*5Pg^vrh7;_>87 z06}sYcI*#cFIS^u$cQ^E{NuP*h=FR+$3HiGZc2ao+(1Y|@J_1~`f-6A`?8a2y>Id5 z9A5iO`*;P;jkk5D zn>r5+r#<>?k)a=!-xjb_+1n`c#*Q7I4J}^G;jm|D4f~S|EAoxhKCXVS=Y90qYw;wl z3?DDZZ1ErHw`TK?>F%~4De{rZwTyLM#;N-*mMzaDhj8cTHKr3nJMZcmVHQi;n-|&> zTS^L;&GP*h`I7Bp2_Ki=UI-m4wynlc4QKii^H1cK^4Ikwyz?#nPt9=di?b@lEyOJT z;@fXBK8<~8+ZD#jlh0Wz?d&aB*V(~%&QRW?_XdsHCa`{!SGDfDYVl0X!M1d>#KD_{ zoWVMGMUPNjUCW*@@4hvYpkkbFgj((0H*L;!S-RojgAvYQ%vTH93{7-djG8=F*VnJT zr4K78CXDMwiN?)f({wY86^(uw;>2sTBu4(dBQDrkBg!PtQqwo$QNBS}CflQ{lpl3J zXv(5R&jqoYOXs^cxVJCOXtDo`dm~b^BEshtog`)^CTzxGF7dKa7qjOve0yf3_12iY zx#GAvXeE0tlj|jmw%G`u8-Ym}u9POBU@bMZK=(rO)Po^mDg82!H^poBTigtr0uX{I#88ef_N(59jpfpDi0j zXVfjOt92(-QC#8Nom@DY+UyawH*)e(`tmdmah0Cwr+CC{48DhvurvPdA7|=Zc*~u3 z*)UJ{$n0|K3H2@#pzV)PkbXLPlVt^mZ(A9x(cEmH+vY_ zRTUXt^f$7x<3P(^M{)|tu*#3hsQIROBxRy# zddI>-U+5~&me3;Ik?`1iIfBoCix{kq| zwxIzfkz4n`OTnW9DyBTpd)IV6 z@Cm-4r>(SVX(E?UHO7e%)tF3$o<}ubhk<}~ z^5i&#%BIVOCoq^fn8lO(lL1udARhAicMM=sNkBgg@ia%I2TF-S@B|D4zc;>Ou|WYY zemCq9z~9&NK40_;KQVj`ke+`k>q9@pL-dq0{#II{sY6LInFS=y5~$g5>-O7#?RUTm zf@Ql)5&CDY#Y<>Z54aYEb`Jdea=v}ZWur_gfl!JU>8<_G+Q*-LFhQlXkJ*J`G4!Q; zWPeG>{=-kFz~?{hSI{TMS0YDRH7K(HGenJ;j~N1*g#t|xME!Sd?oSTs@Jr3U4UF!$ zOFyx?|M>GSXCX8}=fF4n)6_wSF2zsBA^LX^5^nlQ#XSA|-xXEI>5(@yj4;Uh+a&n2 z{!Ju&=Kr*4`tKs@fBSnssG0vAVD}I8ICwy=tt?K3!cw2K(SkXm>vEVLY!L?lorBz_ zH#mTG{vpx_7vobHFLdHleZAW35PGfbmVcrS{GaZxn(xUdc%I_n$?5C6vEU*nw@HEn zeU4Tv+z0=MRplU|4bnpk^V`EPVS z10hi(Owbe(!MKOgfHp)D$e9DhDhc+MT9{&n{I*DHUTwSp?N|W_$htNZ9)N0p9t5SeWeLP}H3fp}WuXVK0xnose6|ilUMmTVYZV};CUl`Wd?k?RLIFj9EpRq(A`YRc z-sY*P<2>CZpmjbI25WL1&u4d#3&VN{0Ia1l1b5L{+N0r6pk9ka1l`~abZ9hSu=5Z` zH9a$9nmNu8fWa6VT0N1Pe}QHa=8q;t=<>q%V&wr`R`%WuKs9fgHyw-?x59|w~ zAI}T_p%5WAt|z2HnB9^C44pU_l!Xjn9hBt|9~c-Y5pGBQS&)tHscDx(VA|0p$Bu&DpyFMrH`Pem3v^+&&L7kRq$ZC={d&!2ZFe-(|T% z!p)!?LV2ED;Lsjl^M<~gP^%aw!e}Z=PZxf6<9x>hb>+2Wj#y0_&{}5(++JT>?Rk0- zt~O!m7Hjy$enGzoN!J{RPE1-^XMu5R@BNr~ckOw<`BKI@P(U4O5;QY5e4b|M3UCcU zD6J|+&I<4r1i9HhG6yt+c_;wrdetcn_fIf5uH8}sZkFFI(>IW!pL>mug85)gh%<<8 zjQ}FgaGe>-ELwscU1!woiRAPH4xq%_()0xNxJ*Fhn3Ac(TexsTVwP-&_!U$x#F9veY2KZc%R0y?miid)DtDEGmJNX%rJ;o9U zEOeqW2sv+Tu$Dp)e276BtPS!AdEe_0*3Gs)2l2KpGp0>{$n?IJfOKoyL@LSt>jgwB zt)kI#KzGOO_hxwNft~~4-upq5k%IyR04~K!3xbRnrQ)~)7tIIg&rlJDBW(`A>wFl; z)B(7tNj!clEB(d>(P-%b&|jvLCVuDpIa*gcQ}#Lc`H2VD-L3Y-5NB_JUszaehvjb@ zyR2+{HUv0Z!*lPu1VS19^^zoAa7`m_5DU(W%wrrNQ`_)15x;=NIv-G!E(rVWu(Le- z>o_lR`NPz*tkYCp+^jNZ+Bn=RxnOOk0=F()TU+bDm<}1Sy6O7YfrCXVSys5MmeUb z@jxJQQm`4mA2%QYixK7Z11BnN3K_})&3fT5tt;cSH<(u(OVgqpJ{)X=m`7I6ZBHL> zz?Y4d6Yyl^qpaNRCtqDdkUjx|=0dgrx)ePRRC9=60kZc1jE!iP-H8wX)8_zk!#Y*H zid-gbVePbzTvs@}``6oB9tcD~gb<|nDtUa+$~xGp9nqzJ@PWzqAK>iHlm z30`0CtMbPK>i2C@>G_FHSaYvFDc^Eg;ODKRgMyF|h#PSOFflb>R{-IiwF#FBQn#?O zAypRq`NvN2GkDqxi|*yD6C3w(>;Hla>Yw4T|NG?on!*23zF%bdKbG(N#c2W^0oFH= z8aB8se4`NqwxS_iX!!y4enclS;L?M7zocazauHZ`{3ND79>X4HwRVHGZ+tNfeKpxW z;Ya_voPTfzMVdsMzJB5JB%VyfWUOsKjF%Mx;{I!SzvK-sz(mtw0OXlu7_nx!ipngY zFInXunwChfuQ;lxs**t6BygjQA`Tg8q2Ff4fb=IpStiPT8aC*Rw3_gc5RA%CO!Hw2 zz@f0py$QNd?gKFzZMi@>8Gwey+`>Yay9e=PFo^We>Gg*C`h3X0r2z9!-yR|1l8FRD zyJuiCG+M9&lgkcSsjqiZq_urm1%RYewMtH<{-Ii~Bnf*+Rr>bNv-215JZR ziAjI*RS!S@#4EDH;E{QvAKy9t>D=b0o#8?I7F^WaK5DhE8rb4f4IJR5iGQZMYEW=T zY9I3)668L|dkPzN%@$rleCeDE766?yw7Yw9gESr`CjZITb&^J|`eFCTJlU5|>M(8p z!Dq|j;xy9VbGN))4Gpr*gPC7w@y{BF#ybTh`YNXjalL=kl5Z?4bI3CSWYY7NXF_|=<0{}O>5ZdP>Q50qbGy-)T?V; zn5UgGfv?p)qdsgv3^7o$3XOP|=vTux6P>rCRl_E$bn}brCmh;qLO$H~bzRSR{RX8W5 zHT|^>mg3d0>tT({SKRV&aV6wLRp*sI(vC2|Sq;pTXL=XyEXr#!DjYYsL`k&fm(m$P z{}j4BydRtR7;6GOzd=sI1vf)IT)H8Ncwtx0SDc_>Udp@e9X3;T`ED5kS{9K;Iwjv5 zOrG7~I+82WX+ewd0Q=+47RbKhkXMFl-|Lxy?&G{L zzN-Za)!k1?kBZKuGpe}9i!isZo)fHE&9``IkySwKxM&|1a`laOnDFE^--FL+HWAGH zxgrdX-Bm7-|AwFTCRuP<^ULIt0BqX5bp4bWR=3XHTcB>#OkQ)Bd#Aig2I1`?0ex(1 z&J7CSO4;c_n9%6X54z?qPZs&ObZ$iIdFI+u2b^+X4&B9>xT-edwakzNi;lki(zxMO zGlN9m&@ghnuBeePj3x}qtaEkZ!4<&1E=_ec!=O}U%ZWNL;=v3xt@uEO)aJ2D0-4YH>LWNxwlkp7VlZdwuSH-yP|vgj+&?B=lUL<5Lmj&BkaawOW_8 z5H7Xv6{O0`n2m`ijBBRn5ja}rkT63RV!zL+1Myz|uE>Pq_OjGtX__$_$swh-jOTu5 z>20>^%(}B=Yx`0b?_|ZoMoJ$?k z8|&+ZgTCDPRsnBf8U$%n-DLgi4-GQaDU6{vvy8)>3-&W_?&Gr7w!z#naC_7_PFtOx zeX`!I($zJ_xRlu;t}rlaL-j~r83{}7%8J4tG`F@P=x&3n&t*|IQ`_>!df3SS-4gI0 z-JN6-m^)YRKtk;(ICx2 zDMfF>IO!_pHqkZgdJv{}?gE1~DOQOg5Cv+NLgxo^(dbUdlhTsDDqn(9pP@H3JiDa; zMl)E&iEdW9Bxi~*;i7L`wD&~sGMA|Nd-d)tBtR8Dj(-2xkadXy>7*F++I#b%d4#LI)`BK6`D^Fo)W> zm;)k&+F~zmbKyUaJi6-{c;uhOfh;%t7{l@1OnVEE-qGDNBTdMs2o!okM_8+a53^k6 zWc)*T=M>7FLhU)A6S#-H$LUl*L#)=v9bA=MQe{7_Jp%}5u6gQ8f&AJ6`N-5ZoS`7oCh7~s&kiOv?J zrC}V0F*bE@YaANyev|92Zwyl`key>5T>A=q1t8Pb3&A5hz-X!zq%w1u1KeO#dFzLX z=Q<4iwMN=EBolQy3HFs1 zcnqjsP`|yX9XBZh>8v3j0X?N2kZJXLePvk2!J7(dHX9i1{us400Gwb0;-4K;Gz2}} zrRB>ZBFc-oa<_BQ?DZ~W=aF)owI4;JFOj~<2&ggA0t4#_W%fJbF*}Nt_o|7H9(Q>Q zRC+b`OM8ZqDBQD!Mko_D57bMAF;i%A!!8#?#a$jK8;a?`=@>~%n6bb?gM-LJX|@dU zMGw%N+I)C?y1=)qxkfjpNh*MfRszN3*5M$F-hq~kjJMX*vQm_LH(1N_8-qr9Yp4S# z8k}6Gp^45%0DB$PsYTT^^PJ<*l?|f=7&YwMcQd@)$Vpl{?a)^_J&2TzAk4ZC^9*2I zuoIITfB`fx8DxY}x5mVQQlfB(pOF)U@Jh|vjEl(Xr{YjE!#^5YpjC;Pxek5xa z@X>zl3ibwuZ$l`r9aa{XuysOdlRr+%s2d(%H0Hf{QuiENA{K^V5$nd!zl|T>*_2zo zQ)1#8V2|HkDhMWcL!JXNLg8WD#J7W&?wk&P@Q05TjNP!h+-V6n;_h`Si1r&nB32Uy zzT{mnFh*MFT7}QFD@2psH*yBZ?he%f;5I)HEA05gDleztj0#v$;}!IXy|R&I*Jv3u!MB)5r@3&qD1XXPQh#& zCwL5&r1!!T=!fpaX;(wNg#~*fn{0VYxSHED3`smU)=(PSRQJ)M-b%*pJH@{EXh0Eo z0dD4i7wgbq--n?;g;7Fh0C*YmQQq>7T9N7*+sjI%Jg8n?L5K%TwfNwcZ3^??|8!SL zE%1ezj@;3+^O`t>;4!zguqjc5=mY$Ff24)ViG`d3{cy0}c|GzO%uOjIj08+e;HnzA zR;OtDVF!-J6bntKPvuq&m)zkw$5OZOeBDt#X{|M<8}bK{)tV0pcTgTjrp4Xn?N`0w z`#Lx5@@m-Gq|-l&0L{%i#VRl%OzMhc6SBvND5u8T8W`r3&1^QW<$PVOp5#G7{q(vF zYA>1F02l;-tY_$M1x(Vety>^Q37C|0WW?`qOy@}?Chg~6xwBigzbx~C3x0|swJ_R} z{4R&cy6y0pU{Qc7x)`NSq^-shpZhHXnA2TOyv6Aso?qFQfhLp}rxM5ATN4!Ih{Q_k zM+-%Ne(;BRuA8Tv60_87TTQ+q$OQ(I)k?2?zgRp*Ofz=rK%OS+g}h8ZN>Rjps?jI? zQ}`|6ZG@^~T{_Ffl9iQ__$NgbImAs71#6&wv;@Iy!Q@$(z4OprVhz^eE_jrOiyw=B zxzHj9GqX^3$nXix_$3rW!mMZfm0mIA?3n5R*p2C_k{?v05;s|vv|aV~T$lu>3a*yl{~1ur{KPj$)hYBv!LjE-kgpo3Na z!7WUO@a%WCXtLe093x=f_JK6JCM|Yj+N6#ao^wSfQDUOIyL&oslaRF4#YC$~D~VMA z#6ud|??n?UH(&mpB%wQ}5pvY87!VvDzO*9}I=o8cE30nCn68T?>|=Ss7*OSnyWM`m znXl3+AiiQC+pu-dsz(g*JL}O2xIME@UwNT-H1&kAr8q!Tdj`U-Gac|O~xSKt9V?gwoc314L2BP?fC=rGa9 z8l1BIC=IMAyHh9-v4tl~BCLm}+q-T7NxrAlRrYy;h%YOz10XbmiGi?M-7-D0 z6YM?(F3toe7kK`6pCft>bRTP!UA; r3C2*PpZ}Z){bvN}|J{G5+cE8(5ZGJBX|wPZ9lw&i+NI13*Y5s*F+TWE literal 0 HcmV?d00001 diff --git a/SobolevNS/docs/data/task1_data_structures/docs/data/plots/delete_compare.png b/SobolevNS/docs/data/task1_data_structures/docs/data/plots/delete_compare.png new file mode 100644 index 0000000000000000000000000000000000000000..1683cc2de3c6f9044eb0c9eae54c33b586d5e546 GIT binary patch literal 43342 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%0A6u*4t{}>{P;8Byc%{Hn6{|eA>4_QfjtDD(4I7?r zV%eF!Xz7gKBDbqoSj4WZYDL+Jz>hm|g9I#zH1{g&{dgU&UJ2gbx`% z)NT7AMq!vyW@|snWhMQ1Z{V(|4Bf^gC$ydh6DHQzP}jxplw8=&skG+2w%5*&eA4G% zG4z{K;)|9WK9>=ci+^hGL^GvqYW%vZomRm3@R>0bSb;;6yBq-!8t9vHUWKdel~U}Z zrw6f-XGN}bJtc4a!{kuHrivQ^!!i;VzJ)@=a+i-ZTr zo|LU>Hc;J(Af|7b;IkESYkq)S@Xq#qrS7`3n+>}E#_{z%P~4KJJsZ{sclJylQ3?&F z*FO4JkwjNFi84ztyk)feAXjeJd4v524?d5dLcD|eOvI^^%N#!@+*wxsq2i3a^Ebc4 zs$PkH#;S^!PwghK{GQ37Ewt{!&l)TL%09*Zbo;YCg@7DBkuZsN+Vuy6S^F{}nbQeZ z+a%}ICh+p`hC3z~p*>VEO{(+l;93?{sk3JbS5i<|>W#4Dw~m{L4PVcu^yw|TQZ9Yp z=(UTV=_EQUAu|sWgGYuj9NqJ-EYv-mN^fp zaChcub7u_>4lbXxjk#tz%u)8XhC~f~XdBuDWg*P}HI69n)b*pIQ$>#0U#Lz|!Tw@% zC&n`{oKvuE3b_F_URGwz^wMK{A8oB)!$~u|Ipaw1$|(Z9l&+ zsC9(P`571(wlO_+S1j`o91{fc|g* literal 0 HcmV?d00001 diff --git a/SobolevNS/docs/data/task1_data_structures/docs/data/plots/find_compare.png b/SobolevNS/docs/data/task1_data_structures/docs/data/plots/find_compare.png new file mode 100644 index 0000000000000000000000000000000000000000..a50f2dfcb0fdd6dc1c4b45e77c2b89de67ddf09c GIT binary patch literal 41902 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 literal 0 HcmV?d00001 diff --git a/SobolevNS/docs/data/task1_data_structures/docs/data/plots/insert_compare.png b/SobolevNS/docs/data/task1_data_structures/docs/data/plots/insert_compare.png new file mode 100644 index 0000000000000000000000000000000000000000..c3bcd797d1ee32514fc91ae96d6cb0319e4ed499 GIT binary patch literal 43936 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 I;vt{^0oTR< Date: Fri, 22 May 2026 12:23:12 +0300 Subject: [PATCH 4/5] add README.md --- .../docs/data/task1_data_structures/README.md | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 SobolevNS/docs/data/task1_data_structures/README.md diff --git a/SobolevNS/docs/data/task1_data_structures/README.md b/SobolevNS/docs/data/task1_data_structures/README.md new file mode 100644 index 0000000..5b922d2 --- /dev/null +++ b/SobolevNS/docs/data/task1_data_structures/README.md @@ -0,0 +1,22 @@ +# Задание 1. Структуры данных - телефонный справочник + +Реализация связного списка, хеш-таблицы и BST в процедурной парадигме (без классов). + +## Как запустить + +```bash +# 1) самопроверка структур +python3 phonebook.py + +# 2) эксперимент (5 повторов × 3 структуры × 2 режима × 3 операции) +python3 experiment.py +# результат -> docs/data/results.csv + +# 3) графики +python3 plot_results.py +# результат -> docs/data/plots/*.png +``` + +## Отчёт + +См. [docs/report.md](docs/report.md). From 75a182304e37662a48717d2c740a4b8dc53eb2aa Mon Sep 17 00:00:00 2001 From: SobolevNS Date: Fri, 22 May 2026 12:24:28 +0300 Subject: [PATCH 5/5] add data structures report --- SobolevNS/docs/report_01.md | 169 ++++++++++++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 SobolevNS/docs/report_01.md diff --git a/SobolevNS/docs/report_01.md b/SobolevNS/docs/report_01.md new file mode 100644 index 0000000..fd4271c --- /dev/null +++ b/SobolevNS/docs/report_01.md @@ -0,0 +1,169 @@ +# Отчёт по заданию 1. Структуры данных: телефонный справочник + +## 1. Цель работы + +Реализовать три структуры данных «руками» (без классов, в процедурной парадигме): +**связный список**, **хеш‑таблицу с цепочками** и **двоичное дерево поиска (BST)**. +Сравнить их на одной и той же задаче - телефонный справочник с операциями `insert`, +`find`, `delete`, `list_all` - и понять, какая структура когда лучше. + +## 2. Что и как реализовано + +Все три структуры реализованы в `phonebook.py`. Каждая - это набор функций, +которые получают/возвращают текущее состояние (узел или контейнер). +Объектная парадигма сознательно не использовалась - это позволяет «увидеть руки» +каждой операции. + +### 2.1. Связный список + +Узел - обычный словарь `{'name', 'phone', 'next'}`. Голова списка - это либо +такой словарь, либо `None`. + +Ключевые функции (полный код - в `phonebook.py`): + +| Функция | Сложность | +| --- | --- | +| `ll_insert(head, name, phone)` | вставка в конец или обновление: O(n) | +| `ll_find(head, name)` | линейный поиск: O(n) | +| `ll_delete(head, name)` | O(n) | +| `ll_list_all(head)` | собрать всё + сортировка: O(n log n) | + +В `ll_insert` я специально хожу до конца, чтобы потом сравнить с худшим +случаем - это объясняет «провал» на графиках вставки (см. ниже). + +### 2.2. Хеш-таблица + +Контейнер - словарь `{'size': int, 'buckets': [head|None, ...]}`. Каждый бакет - +голова связного списка, и внутри бакета работают всё те же `ll_*` функции. +Хеш-функция: `hash(name) % size`. Размер таблицы - 2048. + +| Функция | Сложность (амортизированно) | +| --- | --- | +| `ht_insert/ht_find/ht_delete` | O(1) при равномерной хеш-функции | +| `ht_list_all` | O(n log n) (надо собрать всё и отсортировать) | + +### 2.3. Двоичное дерево поиска (BST) + +Узел - словарь `{'name', 'phone', 'left', 'right'}`. Реализация **итеративная**, +без рекурсии - это важно для эксперимента с отсортированным входом (вырожденное +дерево глубины N, рекурсия упёрлась бы в лимит). + +| Функция | Случайные данные | Отсортированные данные | +| --- | --- | --- | +| `bst_insert/bst_find/bst_delete` | O(log n) | **O(n)** (вырожденный «список») | +| `bst_list_all` | O(n) (in‑order, сразу отсортировано) | O(n) | + +## 3. Эксперимент + +### 3.1. Методика + +* Генерируем `N = 10 000` записей вида `("User_00000", "555-0000000")` и т.д. +* Два режима ввода: **shuffled** (случайный) и **sorted** (отсортированный по имени). +* Каждое испытание повторяется **5 раз**, в CSV сохраняем все 5 значений + и среднее. +* На каждом испытании: + 1. строим структуру заново; + 2. вставляем все N записей - замеряем время; + 3. ищем 100 случайных существующих имён + 10 несуществующих (всего 110 вызовов); + 4. удаляем 50 случайных имён. + +Замер - `time.perf_counter()`. Все значения в секундах в CSV, в отчёте перевожу +в миллисекунды. + +> Для **BST в режиме `sorted`** пришлось снизить N до 2 000. При N = 10 000 +> вставка занимает десятки минут (сложность операции - `O(N**2)`, дерево превращается +> в связный список). Это и есть главная иллюстрация «деградации BST». + +### 3.2. Результаты (средние, миллисекунды) + +| Структура | Режим | N | вставка | поиск 110 ключей | удаление 50 | +| --- | --- | ---: | ---: | ---: | ---: | +| LinkedList | shuffled | 10 000 | **4 027** | 34.87 | 14.43 | +| LinkedList | sorted | 10 000 | 3 056 | 27.58 | 13.34 | +| HashTable | shuffled | 10 000 | 6.71 | 0.068 | 0.038 | +| HashTable | sorted | 10 000 | 6.42 | 0.068 | 0.033 | +| BST | shuffled | 10 000 | 16.84 | 0.172 | 0.115 | +| BST | sorted | **2 000** | **121.17** | 5.20 | 7.48 | + +Полные сырые данные - в `data/results.csv`. + +### 3.3. Графики + +![Вставка](data/task1_data_structures/docs/data/plots/insert_compare.png) + +![Поиск](data/task1_data_structures/docs/data/plots/find_compare.png) + +![Удаление](data/task1_data_structures/docs/data/plots/delete_compare.png) + +![Деградация BST на отсортированных данных](data/task1_data_structures/docs/data/plots/bst_degradation.png) + + +## 4. Анализ + +### 4.1. Почему связный список такой медленный на вставке + +Мой `ll_insert` идёт до конца списка, чтобы потом обновить узел, если он уже +есть. На N‑м элементе он совершает уже N шагов. Суммарно - около N**2/2 +операций. На N = 10 000 это даёт ~50 миллионов проходов по узлам - отсюда +и ~4 секунды. + +Если бы мы вставляли **в начало** (за O(1)), общая вставка стала бы линейной, +но тогда: +* возможны дубликаты (обновление пропускается); +* для совместимости с двумя другими структурами всё равно понадобился бы поиск. + +Поиск и удаление быстрее: 110 поисков ≈ 35 мс, потому что в среднем ищем +N/2 шагов и таких запросов всего 110. Сложность каждой операции - O(N), +но запросов мало. + +### 4.2. Почему хеш-таблица почти не зависит от порядка + +Хеш-функция превращает имя в индекс бакета. Сами имена `User_00001`, +`User_00002`, … равномерно распределяются по 2 048 бакетам, поэтому в каждом +бакете лежит в среднем ≈ 5 элементов. Все три операции работают за ~O(1). + +Порядок входных данных не имеет значения, потому что `hash(name)` от него не +зависит. На графике видно: shuffled и sorted столбцы у HashTable одинаковой +высоты. + +### 4.3. Почему BST деградирует на отсортированном входе + +Когда имена приходят в алфавитном порядке, каждый новый ключ всегда больше +предыдущего, поэтому он идёт в правое поддерево. Дерево превращается +в правый «костыль» - фактически в односвязный список. Сложность вставки - +O(N**2), поиска и удаления - O(N). + +На графике `bst_degradation.png` это видно очень ярко: даже при **в 5 раз +меньшем N (2 000 вместо 10 000)** все операции у sorted BST занимают +в 5–10 раз больше времени, чем у shuffled BST. + +Это известная слабость наивного BST. В реальном коде её решают +**самобалансирующимися деревьями** (AVL, красно-чёрные, B-деревья), +которые гарантируют глубину O(log n) даже на отсортированном входе. + +### 4.4. Удаление + +* В связном списке удаление - это пробежка до нужного узла + переключение + ссылок. На 50 запросах суммарно ~14 мс при N = 10 000. +* В хеш-таблице удаление - это пробежка по бакету (короткий список), почти O(1): + всего 0.038 мс на 50 удалений. +* В BST стандартное удаление: если у узла двое детей, заменяем его на минимум + правого поддерева и рекурсивно удаляем его. На случайном дереве - O(log n) + на удаление; на отсортированном - O(N). + +## 5. Что выбирать в реальной жизни + +| Сценарий | Лучший выбор | Почему | +| --- | --- | --- | +| Частые `insert`/`find`/`delete`, порядок не нужен | **Хеш-таблица** | O(1) на всё | +| Нужно много раз получать **отсортированный** список | **BST** (с балансировкой) | in‑order обход - это и есть сортировка, O(N) | +| Очень мало данных или редкие операции; нужна простота | **Связный список** | минимум кода, O(N) - приемлемо | +| Нужны диапазонные запросы («все имена от 'A' до 'D'») | **BST/сбалансированное** | хеш-таблица их не умеет | +| Гарантированная производительность на любых данных | **Хеш-таблица или AVL/RB-tree**, но **не наивное BST** | наивное BST уязвимо к отсортированному входу | + +Хеш-таблица в стандартной библиотеке Python - это и есть встроенный `dict`, +которым стоит пользоваться по умолчанию для пар «ключ → значение». +Понимать «руками» связный список и BST полезно, чтобы знать, что лежит +под капотом более сложных контейнеров и понимать, +когда их применять (например, `OrderedDict`, `sortedcontainers.SortedDict`, +индексы в БД и т. д.).