From edea3cf379309302ae3fa616ae00a525393cefc9 Mon Sep 17 00:00:00 2001 From: Proninvv Date: Fri, 20 Mar 2026 20:59:23 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=B4=20=D1=82=D0=B5=D1=81=D1=82=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D1=81=D1=82=D1=80=D1=83=D0=BA?= =?UTF-8?q?=D1=82=D1=83=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/document.tex | 8 + .../report/preambule.tex | 46 ++++++ ProninVV/aufgabe-1-data-structures/test.py | 142 ++++++++++++++++++ 3 files changed, 196 insertions(+) create mode 100644 ProninVV/aufgabe-1-data-structures/report/document.tex create mode 100644 ProninVV/aufgabe-1-data-structures/report/preambule.tex create mode 100644 ProninVV/aufgabe-1-data-structures/test.py diff --git a/ProninVV/aufgabe-1-data-structures/report/document.tex b/ProninVV/aufgabe-1-data-structures/report/document.tex new file mode 100644 index 0000000..3a5f6fa --- /dev/null +++ b/ProninVV/aufgabe-1-data-structures/report/document.tex @@ -0,0 +1,8 @@ +\input{preambule.tex} + + + + +\begin{document} + +\end{document} \ No newline at end of file diff --git a/ProninVV/aufgabe-1-data-structures/report/preambule.tex b/ProninVV/aufgabe-1-data-structures/report/preambule.tex new file mode 100644 index 0000000..d8dc43d --- /dev/null +++ b/ProninVV/aufgabe-1-data-structures/report/preambule.tex @@ -0,0 +1,46 @@ +%\documentclass[a4paper, 12pt]{article} +\documentclass[a4paper, 14pt]{extarticle} + +\usepackage[english, russian]{babel} +\usepackage[T2A]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage{comment} + + +\usepackage{fontspec} +\setmainfont{Times New Roman} + +\usepackage{amsmath} +\usepackage{amssymb} + +\usepackage{geometry} +\usepackage{titleps} +\usepackage{graphicx} +\DeclareGraphicsExtensions{.pdf, .jpg} +\usepackage{wrapfig} + + +\usepackage{indentfirst} + + +\geometry{top=20mm} +\geometry{bottom=25mm} +\geometry{left=30mm} +\geometry{right=10mm} + +\usepackage{float} +\usepackage{wrapfig} + +\newpagestyle{main}{ + \setheadrule{0.4pt} + \sethead{ННГУ им Н.И. Лобачесвкого}{}{В. В. Пронин} + + \setfoot{}{\thepage}{} +} +\pagestyle{main} +%\setcounter{page}{2} + +\linespread{1.5} +\setlength{\parindent}{10mm} +\setlength{\parskip}{1ex} + diff --git a/ProninVV/aufgabe-1-data-structures/test.py b/ProninVV/aufgabe-1-data-structures/test.py new file mode 100644 index 0000000..c12d590 --- /dev/null +++ b/ProninVV/aufgabe-1-data-structures/test.py @@ -0,0 +1,142 @@ +from aufg1 import * +import time +import random +import sys +import csv + +sys.setrecursionlimit(20000) + +def phone_number_generate(): + number = "8" + text = "0123456789" + for i in range(10): + char = random.choice(text) + number += char + return number + +def create_data(n=100): + + """ создаем сразу обычный массив и остортированный """ + + records_sorted = [] + for i in range(n): + name = f"User_{i:05d}" + phone = phone_number_generate() + records_sorted.append((name, phone)) + + records_shuffled = records_sorted + random.shuffle(records_shuffled) + return records_sorted, records_shuffled + + +def run_expirement(epoch=1, elements=100): + + """ распределяем данные по трем структурам данных + тестируем время операций (вставки, удаления, перебора) и записываем полученные результаты в файл """ + + + # создаем данные + records_sorted, records_shuffled = create_data(100) + + datasets = [ + ("shuffled", records_shuffled), + ("sorted", records_sorted)] + + # режим - случайный, соритрованный + + header = ["Структура", "Режим", "Операция", "Время (сек)"] + results = [header] + + linklist = None + hashtab = hash_table(elements) + bintree = None + + # сразу будем обрабатывать и случайны и отсортированный данные + for label, arr in datasets: + + # заполнение связного списка + start = time.perf_counter() + for p in arr: + linklist = ll_insert(linklist, p[0], p[1]) + end = time.perf_counter() + results.append(["linklist", label, "insert", end-start]) + + # поиск 110 имен в связном списке + # несуществующие данные + nonedata = [(f"None_{i}", phone_number_generate()) for i in range(10)] + # случайная комбинация + chaossample = random.sample(arr, 100) + nonedata + start = time.perf_counter() + for p in chaossample: + ll_find(linklist, p[0]) + end = time.perf_counter() + results.append(["linklist", label, "find", end-start]) + + # удаление 50 имен в св писке + deldata = random.sample(arr, 50) + start = time.perf_counter() + for p in arr: + ll_delete(linklist, p[0]) + end = time.perf_counter() + results.append(["linklist", label, "delete", end-start]) + + # заполнение хэш-тфблицы + start = time.perf_counter() + for p in records_shuffled: + hashtab = ht_insert(hashtab, p[0], p[1]) + end = time.perf_counter() + results.append(["hashtable", label, "insert", end-start]) + + # поиск 110 имен в хэш таблице + # несуществующие данные + nonedata = [(f"None_{i}", phone_number_generate()) for i in range(10)] + # случайная комбинация + chaossample = random.sample(arr, 100) + nonedata + start = time.perf_counter() + for p in chaossample: + ht_find(hashtab, p[0]) + end = time.perf_counter() + results.append(["hashtable", label, "find", end-start]) + + # удаление 50 имен в хэш таблице + deldata = random.sample(arr, 50) + start = time.perf_counter() + for p in arr: + ht_delete(hashtab, p[0]) + end = time.perf_counter() + results.append(["hashtable", label, "delete", end-start]) + + # заполнение дерева + start = time.perf_counter() + for p in records_shuffled: + bintree = bst_insert(bintree, p[0], p[1]) + end = time.perf_counter() + results.append(["bintree", label, "insert", end-start]) + + # поиск 110 имен в дереве + # несуществующие данные + nonedata = [(f"None_{i}", phone_number_generate()) for i in range(10)] + # случайная комбинация + chaossample = random.sample(arr, 100) + nonedata + start = time.perf_counter() + for p in chaossample: + bst_find(bintree, p[0]) + end = time.perf_counter() + results.append(["bintree", label, "find", end-start]) + + # удаление 50 имен в дереве + deldata = random.sample(arr, 50) + start = time.perf_counter() + for p in arr: + bst_delete(bintree, p[0]) + end = time.perf_counter() + results.append(["bintree", label, "delete", end-start]) + + + with open('timedata.csv', mode='w', encoding='utf-8', newline='') as file: + writer = csv.writer(file) + writer.writerows(results) + + + +run_expirement(1) \ No newline at end of file