From 67a61da62b83369ee8c2f5be5db47ff6b14eef7b Mon Sep 17 00:00:00 2001 From: soldatkinao Date: Sun, 17 May 2026 23:20:06 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=85=D1=8D=D1=88=20=D1=82=D0=B0=D0=B1=D0=BB?= =?UTF-8?q?=D0=B8=D1=86=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- soldatkinao/lab1/task-1.py | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/soldatkinao/lab1/task-1.py b/soldatkinao/lab1/task-1.py index 36b3d54..006070b 100644 --- a/soldatkinao/lab1/task-1.py +++ b/soldatkinao/lab1/task-1.py @@ -51,6 +51,31 @@ def ll_list_all(head): rec.sort(key=lambda x: x[0]) return rec +# 2. Хеш-таблица +def ht_insert(buckets, name, phone): + idx = hash(name) % len(buckets) + buckets[idx] = ll_insert(buckets[idx], name, phone) + return buckets + +def ht_find(buckets, name): + idx = hash(name) % len(buckets) + return ll_find(buckets[idx], name) + +def ht_delete(buckets, name): + idx = hash(name) % len(buckets) + buckets[idx] = ll_delete(buckets[idx], name) + return buckets + +def ht_list_all(buckets): + rec = [] + for b in buckets: + cur = b + while cur: + rec.append((cur['name'], cur['phone'])) + cur = cur['next'] + rec.sort(key=lambda x: x[0]) + return rec + def gen_data(N=10000): data = [] for i in range(N): @@ -118,6 +143,12 @@ if __name__ == '__main__': for r in rows: all_rows.append(['LinkedList'] + r) + print("Хеш-таблица...") + rows = run_test(lambda: [None]*2000, ht_insert, ht_find, ht_delete, ht_list_all, + shuffled, sorted_data, exist_names, missing_names, del_names) + for r in rows: + all_rows.append(['HashTable'] + r) + # Запись в CSV with open('results.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) @@ -133,7 +164,7 @@ if __name__ == '__main__': avg[(struct, order, op)].append(t) print("\nСредние значения (5 запусков):") print(f"{'Структура':<12} {'Порядок':<10} {'Вставка':>10} {'Поиск':>10} {'Удаление':>10} {'ListAll':>10}") - for struct in ['LinkedList']: + for struct in ['LinkedList', 'HashTable']: for order in ['shuffled', 'sorted']: row = [struct, order] for op in ['insert', 'find', 'delete', 'list_all']: @@ -141,4 +172,4 @@ if __name__ == '__main__': avg_val = sum(vals)/len(vals) row.append(f"{avg_val:.5f}") print(f"{row[0]:<12} {row[1]:<10} {row[2]:>10} {row[3]:>10} {row[4]:>10} {row[5]:>10}") - print("\nГотово (только связный список).") \ No newline at end of file + print("\nГотово (ну почти))).") \ No newline at end of file