Написан код тестирования структур
This commit is contained in:
parent
67897bd14b
commit
edea3cf379
8
ProninVV/aufgabe-1-data-structures/report/document.tex
Normal file
8
ProninVV/aufgabe-1-data-structures/report/document.tex
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
\input{preambule.tex}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
\end{document}
|
||||||
46
ProninVV/aufgabe-1-data-structures/report/preambule.tex
Normal file
46
ProninVV/aufgabe-1-data-structures/report/preambule.tex
Normal file
|
|
@ -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}
|
||||||
|
|
||||||
142
ProninVV/aufgabe-1-data-structures/test.py
Normal file
142
ProninVV/aufgabe-1-data-structures/test.py
Normal file
|
|
@ -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)
|
||||||
Loading…
Reference in New Issue
Block a user