From 67897bd14b000718dacbfcaa9b0039a418aaedbf Mon Sep 17 00:00:00 2001 From: Proninvv Date: Thu, 19 Mar 2026 14:04:50 +0300 Subject: [PATCH 01/12] =?UTF-8?q?=D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80?= =?UTF-8?q?=D1=8B=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ProninVV/aufgabe-1-data-structures/aufg1.py | 275 ++++++++++++++++++++ 1 file changed, 275 insertions(+) create mode 100644 ProninVV/aufgabe-1-data-structures/aufg1.py diff --git a/ProninVV/aufgabe-1-data-structures/aufg1.py b/ProninVV/aufgabe-1-data-structures/aufg1.py new file mode 100644 index 0000000..90d121b --- /dev/null +++ b/ProninVV/aufgabe-1-data-structures/aufg1.py @@ -0,0 +1,275 @@ +# LInkedList (Node = List = {'name': 'Имя', 'phone': '123', 'next': None}) имена уникальные (id) + + +def ll_insert(head, name, phone): + + """ проходит до конца (или сразу добавляет в конец) и возвращает новую голову + (если вставка в начало) или изменяет список по ссылке. Удобнее возвращать новую + голову, если вставка может быть в начало """ + + new_node = {'name': name, 'phone': phone, 'next': None} + + # если списка не было + if head is None: + return new_node + + # # вставка в начало O(1) + # new_node = {'name': name, 'phone': phone, 'next': head} + # return new_node + + # вставка в конец O(n) + current = head + while current['next'] is not None: + # проверка существования данного идентификатора (обновляем запись) + if current['name'] == name: + current['phone'] = phone + return head + current = current['next'] + + # проверка на id + if current['name'] == name: + current['phone'] = phone + else: current['next'] = new_node + return head + + +def ll_find(head, name): + + """ ищет узел, возвращает телефон или None """ + + current = head + while current is not None: + if current['name'] == name: + return current['phone'] + current = current['next'] + + return None + + +def ll_delete(head, name): + + """ удаляет узел, возвращает новую голову """ + + if head is None: + return None + + # Удаление первого + if head['name'] == name: + new_head = head['next'] + head['next'] = None + return new_head + + # Если не первый + current = head + while current['next'] is not None: + if current['next']['name'] == name: + target = current['next'] + current['next'] = target['next'] + target['next'] = None + return head + current = current['next'] + + return head + + + +def ll_list_all(head): + + """ собирает все записи в список и сортирует (сортировка вынесена отдельно) """ + + length = ll_Lenght(head) + new_list = [None]*length + current = head + for i in range(length): + new_list[i] = (current['name'], current['phone']) + current = current['next'] + sorten(new_list) + return new_list + + +# вспомогательные функции-------------------------------- +def ll_Lenght(head): + # длина связного списка + counter = 0 + curr = head + while curr: + counter += 1 + curr = curr['next'] + return counter + + +def sorten(arr): + n = len(arr) + for i in range(n): + for j in range(0, n - i - 1): + if arr[j][0] > arr[j + 1][0]: + arr[j], arr[j + 1] = arr[j + 1], arr[j] +# ----------------------------------------------------------- + +# linklist = None +# linklist = ll_insert(linklist, 'Sjora', '123') +# linklist = ll_insert(linklist, 'Vlad', '0000') +# linklist = ll_insert(linklist, 'Dima', '228') + +# print(linklist) +# print(ll_find(linklist, 'Vlad')) +# print(ll_delete(linklist, 'Dima')) +# print(ll_list_all(linklist)) + +# HashTable (Хранится как список buckets фиксированной длины, каждый элемент — голова связного списка (или None)) + +def hash_table(size): + return [None]*size + + +def hash_func(name, buckets_count): + h = 0 + for char in name: + h += ord(char) + return h % buckets_count + + +def ht_insert(buckets, name, phone): + + """ вычисляет индекс, вызывает ll_insert для соответствующего бакета """ + + if buckets is None: + return + + index = hash_func(name, len(buckets)) + buckets[index] = ll_insert(buckets[index], name, phone) + + + +def ht_find(buckets, name): + """ """ + idx = hash_func(name, len(buckets)) + return ll_find(buckets[idx], name) + + +def ht_delete(buckets, name): + idx = hash_func(name, len(buckets)) + buckets[idx] = ll_delete(buckets[idx], name) + + +def ht_list_all(buckets): + + """ собирает все записи из всех бакетов и сортирует """ + total_count = 0 + for head in buckets: + total_count += ll_Lenght(head) + + full_data = [None]*total_count + + k = 0 + for head in buckets: + curr = head + while curr: + full_data[k] = (curr['name'], curr['phone']) + k += 1 + curr = curr['next'] + + sorten(full_data) + return full_data + +# Hash_table1 = hash_table(3) +# ht_insert(Hash_table1, 'Vlad', '000') +# ht_insert(Hash_table1, 'Dima', '111') +# ht_insert(Hash_table1, 'Sjora', '222') + +# print(ht_list_all(Hash_table1)) + +# Двоичное дерево поиска : Узел — словарь: {'name': 'Имя', 'phone': '123', 'left': None, 'right': None} + +def bst_insert(root, name, phone): + + """ рекурсивно или итеративно вставляет, возвращает новый корень (если корень меняется) """ + + new_node = {'name': name, 'phone': phone, 'left': None, 'right': None} + + # если дерева нет + if root is None: + return new_node + + if name < root['name']: + root['left'] = bst_insert(root['left'], name, phone) + elif name > root['name']: + root['right'] = bst_insert(root['right'], name, phone) + else: + root['phone'] = phone + return root + + +def bst_find(root, name): + + """ поиск """ + + if root is None: + return None + + if root['name'] == name: + return root['phone'] + + elif name < root['name']: + return bst_find(root['left'], name) + + elif name > root['name']: + return bst_find(root['right'], name) + + +def bst_delete(root, name): + + """ удаление, возвращает новый корень """ + + if root is None: + return None + + # спускаемся к нужному узлу (аналогично поиску) + elif 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 and root['right'] is None: + # обрываем связь + return None + # если только один наследник + elif root['left'] is None != root['right'] is None: + return root['left'] or root['right'] + # два наследника (поиск минимального поддерева в правой ветке) + + successor = root['right'] + while successor['left'] is not None: + successor = root['left'] + + root['name'] = successor['name'] + root['phone'] = successor['phone'] + # Удаляем дубликат преемника в правом поддереве + root['right'] = bst_delete(root['right'], successor['name']) + return root + + +def bst_list_all(root, result=None): + """ центрированный обход (рекурсивно собирает записи в отсортированном порядке) """ + if result is None: + result = [] + # сначала спускаемся по левой стороне вниз, затем идем вверх и вправо + if root is not None: + bst_list_all(root['left'], result) + result.append((root['name'], root['phone'])) + bst_list_all(root['right'], result) + return result + +# derevo = None +# derevo = bst_insert(derevo, 'Vlad', '000') +# derevo = bst_insert(derevo, 'Dima', '111') +# derevo = bst_insert(derevo, 'Sjora', '222') +# derevo = bst_insert(derevo, 'weid', '0') + +# # print(derevo) +# # derevo = bst_delete(derevo, 'Vlad') +# print(bst_list_all(derevo)) -- 2.43.0 From edea3cf379309302ae3fa616ae00a525393cefc9 Mon Sep 17 00:00:00 2001 From: Proninvv Date: Fri, 20 Mar 2026 20:59:23 +0300 Subject: [PATCH 02/12] =?UTF-8?q?=D0=9D=D0=B0=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BD=20=D0=BA=D0=BE=D0=B4=20=D1=82=D0=B5=D1=81=D1=82=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D1=81=D1=82=D1=80?= =?UTF-8?q?=D1=83=D0=BA=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 -- 2.43.0 From ffb0de63dfce21fdcc2aa43502d95489f59e631d Mon Sep 17 00:00:00 2001 From: Proninvv Date: Fri, 20 Mar 2026 21:38:43 +0300 Subject: [PATCH 03/12] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D1=8B=20?= =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F,=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D0=B4=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=B7=D0=B0=D0=B2=D0=BC=D0=B5=D1=80=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ProninVV/aufgabe-1-data-structures/aufg1.py | 45 +++++-------------- ProninVV/aufgabe-1-data-structures/test.py | 29 ++++++------ .../timedata_1000.csv | 19 ++++++++ .../timedata_10000.csv | 19 ++++++++ .../timedata_2000.csv | 19 ++++++++ .../timedata_500.csv | 19 ++++++++ 6 files changed, 102 insertions(+), 48 deletions(-) create mode 100644 ProninVV/aufgabe-1-data-structures/timedata_1000.csv create mode 100644 ProninVV/aufgabe-1-data-structures/timedata_10000.csv create mode 100644 ProninVV/aufgabe-1-data-structures/timedata_2000.csv create mode 100644 ProninVV/aufgabe-1-data-structures/timedata_500.csv diff --git a/ProninVV/aufgabe-1-data-structures/aufg1.py b/ProninVV/aufgabe-1-data-structures/aufg1.py index 90d121b..b77d1ae 100644 --- a/ProninVV/aufgabe-1-data-structures/aufg1.py +++ b/ProninVV/aufgabe-1-data-structures/aufg1.py @@ -106,16 +106,6 @@ def sorten(arr): arr[j], arr[j + 1] = arr[j + 1], arr[j] # ----------------------------------------------------------- -# linklist = None -# linklist = ll_insert(linklist, 'Sjora', '123') -# linklist = ll_insert(linklist, 'Vlad', '0000') -# linklist = ll_insert(linklist, 'Dima', '228') - -# print(linklist) -# print(ll_find(linklist, 'Vlad')) -# print(ll_delete(linklist, 'Dima')) -# print(ll_list_all(linklist)) - # HashTable (Хранится как список buckets фиксированной длины, каждый элемент — голова связного списка (или None)) def hash_table(size): @@ -172,12 +162,6 @@ def ht_list_all(buckets): sorten(full_data) return full_data -# Hash_table1 = hash_table(3) -# ht_insert(Hash_table1, 'Vlad', '000') -# ht_insert(Hash_table1, 'Dima', '111') -# ht_insert(Hash_table1, 'Sjora', '222') - -# print(ht_list_all(Hash_table1)) # Двоичное дерево поиска : Узел — словарь: {'name': 'Имя', 'phone': '123', 'left': None, 'right': None} @@ -233,23 +217,26 @@ def bst_delete(root, name): # стоим в нужном узле else: - # если у узла нет наследников - if root['left'] is None and root['right'] is None: - # обрываем связь - return None - # если только один наследник - elif root['left'] is None != root['right'] is None: - return root['left'] or root['right'] + # узла слева нет (вернет правого ребенка или None) + if root['left'] is None: + return root['right'] + + # узла справа нет (вернет левого ребенка) + if root['right'] is None: + return root['left'] + # два наследника (поиск минимального поддерева в правой ветке) successor = root['right'] while successor['left'] is not None: - successor = root['left'] + successor = successor['left'] root['name'] = successor['name'] root['phone'] = successor['phone'] # Удаляем дубликат преемника в правом поддереве root['right'] = bst_delete(root['right'], successor['name']) + + return root @@ -263,13 +250,3 @@ def bst_list_all(root, result=None): result.append((root['name'], root['phone'])) bst_list_all(root['right'], result) return result - -# derevo = None -# derevo = bst_insert(derevo, 'Vlad', '000') -# derevo = bst_insert(derevo, 'Dima', '111') -# derevo = bst_insert(derevo, 'Sjora', '222') -# derevo = bst_insert(derevo, 'weid', '0') - -# # print(derevo) -# # derevo = bst_delete(derevo, 'Vlad') -# print(bst_list_all(derevo)) diff --git a/ProninVV/aufgabe-1-data-structures/test.py b/ProninVV/aufgabe-1-data-structures/test.py index c12d590..7b8a541 100644 --- a/ProninVV/aufgabe-1-data-structures/test.py +++ b/ProninVV/aufgabe-1-data-structures/test.py @@ -24,19 +24,19 @@ def create_data(n=100): phone = phone_number_generate() records_sorted.append((name, phone)) - records_shuffled = records_sorted + records_shuffled = records_sorted[:] random.shuffle(records_shuffled) return records_sorted, records_shuffled -def run_expirement(epoch=1, elements=100): +def run_expirement(epoch=1, elements=1000): """ распределяем данные по трем структурам данных тестируем время операций (вставки, удаления, перебора) и записываем полученные результаты в файл """ # создаем данные - records_sorted, records_shuffled = create_data(100) + records_sorted, records_shuffled = create_data(elements) datasets = [ ("shuffled", records_shuffled), @@ -47,13 +47,14 @@ def run_expirement(epoch=1, elements=100): header = ["Структура", "Режим", "Операция", "Время (сек)"] results = [header] - linklist = None - hashtab = hash_table(elements) - bintree = None + # сразу будем обрабатывать и случайны и отсортированный данные for label, arr in datasets: + linklist = None + hashtab = hash_table(elements) + bintree = None # заполнение связного списка start = time.perf_counter() for p in arr: @@ -75,15 +76,15 @@ def run_expirement(epoch=1, elements=100): # удаление 50 имен в св писке deldata = random.sample(arr, 50) start = time.perf_counter() - for p in arr: + for p in deldata: 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]) + for p in arr: + ht_insert(hashtab, p[0], p[1]) end = time.perf_counter() results.append(["hashtable", label, "insert", end-start]) @@ -101,14 +102,14 @@ def run_expirement(epoch=1, elements=100): # удаление 50 имен в хэш таблице deldata = random.sample(arr, 50) start = time.perf_counter() - for p in arr: + for p in deldata: 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: + for p in arr: bintree = bst_insert(bintree, p[0], p[1]) end = time.perf_counter() results.append(["bintree", label, "insert", end-start]) @@ -127,16 +128,16 @@ def run_expirement(epoch=1, elements=100): # удаление 50 имен в дереве deldata = random.sample(arr, 50) start = time.perf_counter() - for p in arr: + for p in deldata: 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: + with open(f"timedata_{elements}.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 +run_expirement(epoch=1, elements=10000) \ No newline at end of file diff --git a/ProninVV/aufgabe-1-data-structures/timedata_1000.csv b/ProninVV/aufgabe-1-data-structures/timedata_1000.csv new file mode 100644 index 0000000..95a6572 --- /dev/null +++ b/ProninVV/aufgabe-1-data-structures/timedata_1000.csv @@ -0,0 +1,19 @@ +Структура,Режим,Операция,Время (сек) +linklist,shuffled,insert,0.028301300000748597 +linklist,shuffled,find,0.002832099999068305 +linklist,shuffled,delete,0.0018718999999691732 +hashtable,shuffled,insert,0.0022233999989111908 +hashtable,shuffled,find,0.00019609999799286015 +hashtable,shuffled,delete,9.929999941959977e-05 +bintree,shuffled,insert,0.002081000002362998 +bintree,shuffled,find,0.00014569999984814785 +bintree,shuffled,delete,7.760000153211877e-05 +linklist,sorted,insert,0.02792069999850355 +linklist,sorted,find,0.0024707999982638285 +linklist,sorted,delete,0.001741200001561083 +hashtable,sorted,insert,0.002176499998313375 +hashtable,sorted,find,0.00019439999960013665 +hashtable,sorted,delete,0.00011420000009820797 +bintree,sorted,insert,0.12917839999863645 +bintree,sorted,find,0.007965299999341369 +bintree,sorted,delete,0.00476150000031339 diff --git a/ProninVV/aufgabe-1-data-structures/timedata_10000.csv b/ProninVV/aufgabe-1-data-structures/timedata_10000.csv new file mode 100644 index 0000000..eedb144 --- /dev/null +++ b/ProninVV/aufgabe-1-data-structures/timedata_10000.csv @@ -0,0 +1,19 @@ +Структура,Режим,Операция,Время (сек) +linklist,shuffled,insert,2.8069403000008606 +linklist,shuffled,find,0.028815499998017913 +linklist,shuffled,delete,0.015906399999948917 +hashtable,shuffled,insert,0.17993940000087605 +hashtable,shuffled,find,0.0018954999977722764 +hashtable,shuffled,delete,0.0012972000004083384 +bintree,shuffled,insert,0.03314669999963371 +bintree,shuffled,find,0.00022189999799593352 +bintree,shuffled,delete,0.00011869999798364006 +linklist,sorted,insert,2.925224900001922 +linklist,sorted,find,0.026056099999550497 +linklist,sorted,delete,0.015979499999957625 +hashtable,sorted,insert,0.15593369999987772 +hashtable,sorted,find,0.0014122000029601622 +hashtable,sorted,delete,0.0008025000024645124 +bintree,sorted,insert,13.357120900000155 +bintree,sorted,find,0.0936219000031997 +bintree,sorted,delete,0.040907499998866115 diff --git a/ProninVV/aufgabe-1-data-structures/timedata_2000.csv b/ProninVV/aufgabe-1-data-structures/timedata_2000.csv new file mode 100644 index 0000000..f41cbff --- /dev/null +++ b/ProninVV/aufgabe-1-data-structures/timedata_2000.csv @@ -0,0 +1,19 @@ +Структура,Режим,Операция,Время (сек) +linklist,shuffled,insert,0.1222989999987476 +linklist,shuffled,find,0.005472099997859914 +linklist,shuffled,delete,0.0038157999988470692 +hashtable,shuffled,insert,0.008049899999605259 +hashtable,shuffled,find,0.0003437999985180795 +hashtable,shuffled,delete,0.00024619999749120325 +bintree,shuffled,insert,0.004746700000396231 +bintree,shuffled,find,0.00016089999917312525 +bintree,shuffled,delete,8.469999738736078e-05 +linklist,sorted,insert,0.12316460000147345 +linklist,sorted,find,0.005846299998665927 +linklist,sorted,delete,7.130000085453503e-05 +hashtable,sorted,insert,0.008595399998739595 +hashtable,sorted,find,0.0003437999985180795 +hashtable,sorted,delete,0.0002158999996026978 +bintree,sorted,insert,0.5351322999995318 +bintree,sorted,find,0.01742980000199168 +bintree,sorted,delete,0.007677599998714868 diff --git a/ProninVV/aufgabe-1-data-structures/timedata_500.csv b/ProninVV/aufgabe-1-data-structures/timedata_500.csv new file mode 100644 index 0000000..c8dcdf8 --- /dev/null +++ b/ProninVV/aufgabe-1-data-structures/timedata_500.csv @@ -0,0 +1,19 @@ +Структура,Режим,Операция,Время (сек) +linklist,shuffled,insert,0.007393100000626873 +linklist,shuffled,find,0.001468800001021009 +linklist,shuffled,delete,0.0008425000014540274 +hashtable,shuffled,insert,0.000751199997466756 +hashtable,shuffled,find,0.00013349999790079892 +hashtable,shuffled,delete,7.670000195503235e-05 +bintree,shuffled,insert,0.0008823000025586225 +bintree,shuffled,find,0.00012040000001434237 +bintree,shuffled,delete,6.539999958476983e-05 +linklist,sorted,insert,0.00702620000083698 +linklist,sorted,find,0.0012153999996371567 +linklist,sorted,delete,0.0007512000011047348 +hashtable,sorted,insert,0.0007286000000021886 +hashtable,sorted,find,0.00012399999832268804 +hashtable,sorted,delete,8.069999967119657e-05 +bintree,sorted,insert,0.03012010000020382 +bintree,sorted,find,0.003360800001246389 +bintree,sorted,delete,0.0017866999987745658 -- 2.43.0 From cb970daadff77686831869acb6705a4a083804ba Mon Sep 17 00:00:00 2001 From: Proninvv Date: Fri, 20 Mar 2026 23:32:11 +0300 Subject: [PATCH 04/12] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B2=D0=B5=D0=B4?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=B2=D1=81=D0=B5=20=D1=82=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../graphics/zadanie3.eps | 2598 +++++++++++++++++ .../graphics/zadanie3.png | Bin 0 -> 50383 bytes .../aufgabe-1-data-structures/graphiki.py | 35 + .../report/document.aux | 14 + .../report/document.pdf | Bin 0 -> 91655 bytes .../report/document.synctex.gz | Bin 0 -> 6360 bytes .../report/document.tex | 54 +- .../report/document.toc | 9 + .../results/timedata_10000_epochs_1.csv | 19 + .../results/timedata_10000_epochs_2.csv | 37 + .../results/timedata_10000_epochs_3.csv | 55 + .../results/timedata_10000_epochs_4.csv | 73 + .../results/timedata_10000_epochs_5.csv | 91 + .../results/timedata_1000_epochs_1.csv | 19 + .../results/timedata_1000_epochs_2.csv | 37 + .../results/timedata_1000_epochs_3.csv | 55 + .../results/timedata_1000_epochs_4.csv | 73 + .../results/timedata_1000_epochs_5.csv | 91 + .../results/timedata_2000_epochs_1.csv | 19 + .../results/timedata_2000_epochs_2.csv | 37 + .../results/timedata_2000_epochs_3.csv | 55 + .../results/timedata_2000_epochs_4.csv | 73 + .../results/timedata_2000_epochs_5.csv | 91 + .../results/timedata_5000_epochs_1.csv | 19 + .../results/timedata_5000_epochs_2.csv | 37 + .../results/timedata_5000_epochs_3.csv | 55 + .../results/timedata_5000_epochs_4.csv | 73 + .../results/timedata_5000_epochs_5.csv | 91 + .../results/timedata_500_epochs_1.csv | 19 + .../results/timedata_500_epochs_2.csv | 37 + .../results/timedata_500_epochs_3.csv | 55 + .../results/timedata_500_epochs_4.csv | 73 + .../results/timedata_500_epochs_5.csv | 91 + ProninVV/aufgabe-1-data-structures/test.py | 176 +- .../timedata_1000.csv | 19 - .../timedata_10000.csv | 19 - .../timedata_2000.csv | 19 - .../timedata_500.csv | 19 - 38 files changed, 4170 insertions(+), 167 deletions(-) create mode 100644 ProninVV/aufgabe-1-data-structures/graphics/zadanie3.eps create mode 100644 ProninVV/aufgabe-1-data-structures/graphics/zadanie3.png create mode 100644 ProninVV/aufgabe-1-data-structures/graphiki.py create mode 100644 ProninVV/aufgabe-1-data-structures/report/document.aux create mode 100644 ProninVV/aufgabe-1-data-structures/report/document.pdf create mode 100644 ProninVV/aufgabe-1-data-structures/report/document.synctex.gz create mode 100644 ProninVV/aufgabe-1-data-structures/report/document.toc create mode 100644 ProninVV/aufgabe-1-data-structures/results/timedata_10000_epochs_1.csv create mode 100644 ProninVV/aufgabe-1-data-structures/results/timedata_10000_epochs_2.csv create mode 100644 ProninVV/aufgabe-1-data-structures/results/timedata_10000_epochs_3.csv create mode 100644 ProninVV/aufgabe-1-data-structures/results/timedata_10000_epochs_4.csv create mode 100644 ProninVV/aufgabe-1-data-structures/results/timedata_10000_epochs_5.csv create mode 100644 ProninVV/aufgabe-1-data-structures/results/timedata_1000_epochs_1.csv create mode 100644 ProninVV/aufgabe-1-data-structures/results/timedata_1000_epochs_2.csv create mode 100644 ProninVV/aufgabe-1-data-structures/results/timedata_1000_epochs_3.csv create mode 100644 ProninVV/aufgabe-1-data-structures/results/timedata_1000_epochs_4.csv create mode 100644 ProninVV/aufgabe-1-data-structures/results/timedata_1000_epochs_5.csv create mode 100644 ProninVV/aufgabe-1-data-structures/results/timedata_2000_epochs_1.csv create mode 100644 ProninVV/aufgabe-1-data-structures/results/timedata_2000_epochs_2.csv create mode 100644 ProninVV/aufgabe-1-data-structures/results/timedata_2000_epochs_3.csv create mode 100644 ProninVV/aufgabe-1-data-structures/results/timedata_2000_epochs_4.csv create mode 100644 ProninVV/aufgabe-1-data-structures/results/timedata_2000_epochs_5.csv create mode 100644 ProninVV/aufgabe-1-data-structures/results/timedata_5000_epochs_1.csv create mode 100644 ProninVV/aufgabe-1-data-structures/results/timedata_5000_epochs_2.csv create mode 100644 ProninVV/aufgabe-1-data-structures/results/timedata_5000_epochs_3.csv create mode 100644 ProninVV/aufgabe-1-data-structures/results/timedata_5000_epochs_4.csv create mode 100644 ProninVV/aufgabe-1-data-structures/results/timedata_5000_epochs_5.csv create mode 100644 ProninVV/aufgabe-1-data-structures/results/timedata_500_epochs_1.csv create mode 100644 ProninVV/aufgabe-1-data-structures/results/timedata_500_epochs_2.csv create mode 100644 ProninVV/aufgabe-1-data-structures/results/timedata_500_epochs_3.csv create mode 100644 ProninVV/aufgabe-1-data-structures/results/timedata_500_epochs_4.csv create mode 100644 ProninVV/aufgabe-1-data-structures/results/timedata_500_epochs_5.csv delete mode 100644 ProninVV/aufgabe-1-data-structures/timedata_1000.csv delete mode 100644 ProninVV/aufgabe-1-data-structures/timedata_10000.csv delete mode 100644 ProninVV/aufgabe-1-data-structures/timedata_2000.csv delete mode 100644 ProninVV/aufgabe-1-data-structures/timedata_500.csv diff --git a/ProninVV/aufgabe-1-data-structures/graphics/zadanie3.eps b/ProninVV/aufgabe-1-data-structures/graphics/zadanie3.eps new file mode 100644 index 0000000..da52358 --- /dev/null +++ b/ProninVV/aufgabe-1-data-structures/graphics/zadanie3.eps @@ -0,0 +1,2598 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%LanguageLevel: 3 +%%Title: zadanie3.eps +%%Creator: Matplotlib v3.10.0, https://matplotlib.org/ +%%CreationDate: Fri Mar 20 22:39:47 2026 +%%Orientation: portrait +%%BoundingBox: 0 0 576 360 +%%HiResBoundingBox: 0.000000 0.000000 576.000000 360.000000 +%%EndComments +%%BeginProlog +/mpldict 9 dict def +mpldict begin +/_d { bind def } bind def +/m { moveto } _d +/l { lineto } _d +/r { rlineto } _d +/c { curveto } _d +/cl { closepath } _d +/ce { closepath eofill } _d +/sc { setcachedevice } _d +%!PS-Adobe-3.0 Resource-Font +%%Creator: Converted from TrueType to Type 3 by Matplotlib. +10 dict begin +/FontName /DejaVuSans def +/PaintType 0 def +/FontMatrix [0.00048828125 0 0 0.00048828125 0 0] def +/FontBBox [-2090 -948 3673 2524] def +/FontType 3 def +/Encoding [/minus /uni0413 /space /parenleft /parenright /comma /period /zero /uni0430 /two /uni0432 /four /five /uni0437 /uni0438 /uni043A /uni043C /uni043E /uni0440 /uni0441 /uni0442 /uni0444 /uni0445 /uni0447 /H /uni044B /a /d /h /i /p /r /v /z] def +/CharStrings 35 dict dup begin +/.notdef 0 def +/minus{1716 0 217 557 1499 727 sc +217 727 m +1499 727 l +1499 557 l +217 557 l +217 727 l + +ce} _d +/uni0413{1249 0 201 0 1130 1493 sc +201 0 m +201 1493 l +1130 1493 l +1130 1323 l +403 1323 l +403 0 l +201 0 l + +ce} _d +/space{651 0 0 0 0 0 sc +ce} _d +/parenleft{799 0 176 -270 635 1554 sc +635 1554 m +546 1401 479 1249 436 1099 c +393 949 371 797 371 643 c +371 489 393 336 436 185 c +480 34 546 -117 635 -270 c +475 -270 l +375 -113 300 41 250 192 c +201 343 176 494 176 643 c +176 792 201 941 250 1092 c +299 1243 374 1397 475 1554 c +635 1554 l + +ce} _d +/parenright{799 0 164 -270 623 1554 sc +164 1554 m +324 1554 l +424 1397 499 1243 548 1092 c +598 941 623 792 623 643 c +623 494 598 343 548 192 c +499 41 424 -113 324 -270 c +164 -270 l +253 -117 319 34 362 185 c +406 336 428 489 428 643 c +428 797 406 949 362 1099 c +319 1249 253 1401 164 1554 c + +ce} _d +/comma{651 0 158 -238 451 254 sc +240 254 m +451 254 l +451 82 l +287 -238 l +158 -238 l +240 82 l +240 254 l + +ce} _d +/period{651 0 219 0 430 254 sc +219 254 m +430 254 l +430 0 l +219 0 l +219 254 l + +ce} _d +/zero{1303 0 135 -29 1167 1520 sc +651 1360 m +547 1360 469 1309 416 1206 c +364 1104 338 950 338 745 c +338 540 364 387 416 284 c +469 182 547 131 651 131 c +756 131 834 182 886 284 c +939 387 965 540 965 745 c +965 950 939 1104 886 1206 c +834 1309 756 1360 651 1360 c + +651 1520 m +818 1520 946 1454 1034 1321 c +1123 1189 1167 997 1167 745 c +1167 494 1123 302 1034 169 c +946 37 818 -29 651 -29 c +484 -29 356 37 267 169 c +179 302 135 494 135 745 c +135 997 179 1189 267 1321 c +356 1454 484 1520 651 1520 c + +ce} _d +/uni0430{1255 0 123 -29 1069 1147 sc +702 563 m +553 563 450 546 393 512 c +336 478 307 420 307 338 c +307 273 328 221 371 182 c +414 144 473 125 547 125 c +649 125 731 161 792 233 c +854 306 885 402 885 522 c +885 563 l +702 563 l + +1069 639 m +1069 0 l +885 0 l +885 170 l +843 102 791 52 728 19 c +665 -13 589 -29 498 -29 c +383 -29 292 3 224 67 c +157 132 123 218 123 326 c +123 452 165 547 249 611 c +334 675 460 707 627 707 c +885 707 l +885 725 l +885 810 857 875 801 921 c +746 968 668 991 567 991 c +503 991 441 983 380 968 c +319 953 261 930 205 899 c +205 1069 l +272 1095 338 1114 401 1127 c +464 1140 526 1147 586 1147 c +748 1147 869 1105 949 1021 c +1029 937 1069 810 1069 639 c + +ce} _d +/two{1303 0 150 0 1098 1520 sc +393 170 m +1098 170 l +1098 0 l +150 0 l +150 170 l +227 249 331 356 463 489 c +596 623 679 709 713 748 c +778 821 823 882 848 932 c +874 983 887 1032 887 1081 c +887 1160 859 1225 803 1275 c +748 1325 675 1350 586 1350 c +523 1350 456 1339 385 1317 c +315 1295 240 1262 160 1217 c +160 1421 l +241 1454 317 1478 388 1495 c +459 1512 523 1520 582 1520 c +737 1520 860 1481 952 1404 c +1044 1327 1090 1223 1090 1094 c +1090 1033 1078 974 1055 919 c +1032 864 991 800 930 725 c +913 706 860 650 771 557 c +682 465 556 336 393 170 c + +ce} _d +/uni0432{1207 0 186 0 1086 1120 sc +370 516 m +370 147 l +632 147 l +716 147 780 163 824 194 c +868 226 890 272 890 332 c +890 392 868 438 824 469 c +780 500 716 516 632 516 c +370 516 l + +370 973 m +370 663 l +612 663 l +681 663 738 677 782 704 c +826 732 848 771 848 820 c +848 869 826 907 782 933 c +738 960 681 973 612 973 c +370 973 l + +186 1120 m +624 1120 l +755 1120 856 1096 927 1048 c +998 1000 1033 932 1033 843 c +1033 774 1015 720 979 679 c +943 639 890 614 819 604 c +904 588 969 555 1016 504 c +1063 453 1086 390 1086 314 c +1086 214 1047 137 970 82 c +893 27 784 0 641 0 c +186 0 l +186 1120 l + +ce} _d +/four{1303 0 100 0 1188 1493 sc +774 1317 m +264 520 l +774 520 l +774 1317 l + +721 1493 m +975 1493 l +975 520 l +1188 520 l +1188 352 l +975 352 l +975 0 l +774 0 l +774 352 l +100 352 l +100 547 l +721 1493 l + +ce} _d +/five{1303 0 158 -29 1124 1493 sc +221 1493 m +1014 1493 l +1014 1323 l +406 1323 l +406 957 l +435 967 465 974 494 979 c +523 984 553 987 582 987 c +749 987 881 941 978 850 c +1075 759 1124 635 1124 479 c +1124 318 1074 193 974 104 c +874 15 733 -29 551 -29 c +488 -29 424 -24 359 -13 c +294 -2 227 14 158 35 c +158 238 l +218 205 280 181 344 165 c +408 149 476 141 547 141 c +662 141 754 171 821 232 c +888 293 922 375 922 479 c +922 583 888 665 821 726 c +754 787 662 817 547 817 c +493 817 439 811 385 799 c +332 787 277 768 221 743 c +221 1493 l + +ce} _d +/uni0437{1089 0 133 -29 968 1148 sc +706 604 m +789 588 853 556 899 507 c +945 458 968 398 968 326 c +968 211 925 123 839 62 c +753 1 631 -29 472 -29 c +419 -29 364 -24 307 -15 c +251 -6 193 8 133 27 c +133 198 l +180 173 232 155 289 142 c +346 130 405 124 467 124 c +568 124 646 143 702 180 c +759 217 787 266 787 326 c +787 385 762 432 712 467 c +662 503 591 521 500 521 c +352 521 l +352 673 l +507 673 l +584 673 645 688 690 717 c +735 747 758 785 758 832 c +758 875 735 911 688 942 c +642 973 579 988 500 988 c +453 988 402 984 348 975 c +295 966 236 952 171 933 c +171 1100 l +236 1116 297 1128 354 1136 c +411 1144 464 1148 515 1148 c +646 1148 749 1122 824 1069 c +900 1017 938 944 938 850 c +938 788 918 735 878 692 c +838 649 781 620 706 604 c + +ce} _d +/uni0438{1331 0 186 0 1145 1120 sc +1145 1120 m +1145 0 l +962 0 l +962 899 l +422 0 l +186 0 l +186 1120 l +369 1120 l +369 223 l +908 1120 l +1145 1120 l + +ce} _d +/uni043A{1237 0 186 0 1169 1120 sc +186 1120 m +369 1120 l +369 594 l +888 1120 l +1114 1120 l +686 687 l +1169 0 l +963 0 l +566 565 l +369 365 l +369 0 l +186 0 l +186 1120 l + +ce} _d +/uni043C{1545 0 186 0 1359 1120 sc +186 1120 m +455 1120 l +773 370 l +1092 1120 l +1359 1120 l +1359 0 l +1174 0 l +1174 944 l +865 215 l +681 215 l +371 944 l +371 0 l +186 0 l +186 1120 l + +ce} _d +/uni043E{1253 0 113 -29 1141 1147 sc +627 991 m +528 991 450 952 393 875 c +336 798 307 693 307 559 c +307 425 335 319 392 242 c +449 165 528 127 627 127 c +725 127 803 166 860 243 c +917 320 946 426 946 559 c +946 692 917 797 860 874 c +803 952 725 991 627 991 c + +627 1147 m +787 1147 913 1095 1004 991 c +1095 887 1141 743 1141 559 c +1141 376 1095 232 1004 127 c +913 23 787 -29 627 -29 c +466 -29 340 23 249 127 c +158 232 113 376 113 559 c +113 743 158 887 249 991 c +340 1095 466 1147 627 1147 c + +ce} _d +/uni0440{1300 0 186 -426 1188 1147 sc +371 168 m +371 -426 l +186 -426 l +186 1120 l +371 1120 l +371 950 l +410 1017 458 1066 517 1098 c +576 1131 647 1147 729 1147 c +865 1147 975 1093 1060 985 c +1145 877 1188 735 1188 559 c +1188 383 1145 241 1060 133 c +975 25 865 -29 729 -29 c +647 -29 576 -13 517 19 c +458 52 410 101 371 168 c + +997 559 m +997 694 969 800 913 877 c +858 954 781 993 684 993 c +587 993 510 954 454 877 c +399 800 371 694 371 559 c +371 424 399 317 454 240 c +510 163 587 125 684 125 c +781 125 858 163 913 240 c +969 317 997 424 997 559 c + +ce} _d +/uni0441{1126 0 113 -29 999 1147 sc +999 1077 m +999 905 l +947 934 895 955 842 969 c +790 984 737 991 684 991 c +565 991 472 953 406 877 c +340 802 307 696 307 559 c +307 422 340 316 406 240 c +472 165 565 127 684 127 c +737 127 790 134 842 148 c +895 163 947 184 999 213 c +999 43 l +948 19 894 1 839 -11 c +784 -23 726 -29 664 -29 c +495 -29 361 24 262 130 c +163 236 113 379 113 559 c +113 742 163 885 263 990 c +364 1095 501 1147 676 1147 c +733 1147 788 1141 842 1129 c +896 1118 948 1100 999 1077 c + +ce} _d +/uni0442{1193 0 60 0 1133 1120 sc +60 1120 m +1133 1120 l +1133 973 l +687 973 l +687 0 l +506 0 l +506 973 l +60 973 l +60 1120 l + +ce} _d +/uni0444{1751 0 112 -426 1639 1493 sc +303 559 m +303 402 327 291 375 224 c +424 158 489 125 571 125 c +636 125 707 181 783 293 c +783 825 l +707 937 636 993 571 993 c +489 993 424 960 375 893 c +327 827 303 716 303 559 c + +783 -426 m +783 143 l +745 80 704 36 660 10 c +617 -16 567 -29 512 -29 c +401 -29 306 22 228 125 c +151 228 112 372 112 555 c +112 738 151 883 228 988 c +306 1094 401 1147 512 1147 c +567 1147 617 1134 660 1109 c +704 1084 745 1040 783 977 c +783 1493 l +968 1493 l +968 977 l +1006 1040 1047 1084 1090 1109 c +1134 1134 1184 1147 1239 1147 c +1350 1147 1445 1094 1522 988 c +1600 883 1639 738 1639 555 c +1639 372 1600 228 1522 125 c +1445 22 1350 -29 1239 -29 c +1184 -29 1134 -16 1090 10 c +1047 36 1006 80 968 143 c +968 -426 l +783 -426 l + +1448 559 m +1448 716 1424 827 1375 893 c +1327 960 1262 993 1180 993 c +1115 993 1044 937 968 825 c +968 293 l +1044 181 1115 125 1180 125 c +1262 125 1327 158 1375 224 c +1424 291 1448 402 1448 559 c + +ce} _d +/uni0445{1212 0 59 0 1145 1120 sc +1124 1120 m +719 575 l +1145 0 l +928 0 l +602 440 l +276 0 l +59 0 l +494 586 l +96 1120 l +313 1120 l +610 721 l +907 1120 l +1124 1120 l + +ce} _d +/uni0447{1210 0 150 0 1024 1120 sc +840 0 m +840 471 l +497 471 l +395 471 310 503 242 566 c +181 623 150 713 150 836 c +150 1120 l +334 1120 l +334 853 l +334 775 351 716 386 677 c +421 638 474 618 543 618 c +840 618 l +840 1120 l +1024 1120 l +1024 0 l +840 0 l + +ce} _d +/H{1540 0 201 0 1339 1493 sc +201 1493 m +403 1493 l +403 881 l +1137 881 l +1137 1493 l +1339 1493 l +1339 0 l +1137 0 l +1137 711 l +403 711 l +403 0 l +201 0 l +201 1493 l + +ce} _d +/uni044B{1617 0 186 0 1435 1147 sc +1251 1120 m +1435 1120 l +1435 0 l +1251 0 l +1251 1120 l + +1343 1147 m +1343 1147 l + +890 332 m +890 392 868 438 824 469 c +781 500 717 516 633 516 c +371 516 l +371 147 l +633 147 l +717 147 781 163 824 194 c +868 226 890 272 890 332 c + +186 1120 m +371 1120 l +371 663 l +641 663 l +784 663 893 636 970 581 c +1047 527 1086 444 1086 332 c +1086 220 1047 137 970 82 c +893 27 784 0 641 0 c +186 0 l +186 1120 l + +ce} _d +/a{1255 0 123 -29 1069 1147 sc +702 563 m +553 563 450 546 393 512 c +336 478 307 420 307 338 c +307 273 328 221 371 182 c +414 144 473 125 547 125 c +649 125 731 161 792 233 c +854 306 885 402 885 522 c +885 563 l +702 563 l + +1069 639 m +1069 0 l +885 0 l +885 170 l +843 102 791 52 728 19 c +665 -13 589 -29 498 -29 c +383 -29 292 3 224 67 c +157 132 123 218 123 326 c +123 452 165 547 249 611 c +334 675 460 707 627 707 c +885 707 l +885 725 l +885 810 857 875 801 921 c +746 968 668 991 567 991 c +503 991 441 983 380 968 c +319 953 261 930 205 899 c +205 1069 l +272 1095 338 1114 401 1127 c +464 1140 526 1147 586 1147 c +748 1147 869 1105 949 1021 c +1029 937 1069 810 1069 639 c + +ce} _d +/d{1300 0 113 -29 1114 1556 sc +930 950 m +930 1556 l +1114 1556 l +1114 0 l +930 0 l +930 168 l +891 101 842 52 783 19 c +724 -13 654 -29 571 -29 c +436 -29 325 25 240 133 c +155 241 113 383 113 559 c +113 735 155 877 240 985 c +325 1093 436 1147 571 1147 c +654 1147 724 1131 783 1098 c +842 1066 891 1017 930 950 c + +303 559 m +303 424 331 317 386 240 c +442 163 519 125 616 125 c +713 125 790 163 846 240 c +902 317 930 424 930 559 c +930 694 902 800 846 877 c +790 954 713 993 616 993 c +519 993 442 954 386 877 c +331 800 303 694 303 559 c + +ce} _d +/h{1298 0 186 0 1124 1556 sc +1124 676 m +1124 0 l +940 0 l +940 670 l +940 776 919 855 878 908 c +837 961 775 987 692 987 c +593 987 514 955 457 892 c +400 829 371 742 371 633 c +371 0 l +186 0 l +186 1556 l +371 1556 l +371 946 l +415 1013 467 1064 526 1097 c +586 1130 655 1147 733 1147 c +862 1147 959 1107 1025 1027 c +1091 948 1124 831 1124 676 c + +ce} _d +/i{569 0 193 0 377 1556 sc +193 1120 m +377 1120 l +377 0 l +193 0 l +193 1120 l + +193 1556 m +377 1556 l +377 1323 l +193 1323 l +193 1556 l + +ce} _d +/p{1300 0 186 -426 1188 1147 sc +371 168 m +371 -426 l +186 -426 l +186 1120 l +371 1120 l +371 950 l +410 1017 458 1066 517 1098 c +576 1131 647 1147 729 1147 c +865 1147 975 1093 1060 985 c +1145 877 1188 735 1188 559 c +1188 383 1145 241 1060 133 c +975 25 865 -29 729 -29 c +647 -29 576 -13 517 19 c +458 52 410 101 371 168 c + +997 559 m +997 694 969 800 913 877 c +858 954 781 993 684 993 c +587 993 510 954 454 877 c +399 800 371 694 371 559 c +371 424 399 317 454 240 c +510 163 587 125 684 125 c +781 125 858 163 913 240 c +969 317 997 424 997 559 c + +ce} _d +/r{842 0 186 0 842 1147 sc +842 948 m +821 960 799 969 774 974 c +750 980 723 983 694 983 c +590 983 510 949 454 881 c +399 814 371 717 371 590 c +371 0 l +186 0 l +186 1120 l +371 1120 l +371 946 l +410 1014 460 1064 522 1097 c +584 1130 659 1147 748 1147 c +761 1147 775 1146 790 1144 c +805 1143 822 1140 841 1137 c +842 948 l + +ce} _d +/v{1212 0 61 0 1151 1120 sc +61 1120 m +256 1120 l +606 180 l +956 1120 l +1151 1120 l +731 0 l +481 0 l +61 1120 l + +ce} _d +/z{1075 0 88 0 987 1120 sc +113 1120 m +987 1120 l +987 952 l +295 147 l +987 147 l +987 0 l +88 0 l +88 168 l +780 973 l +113 973 l +113 1120 l + +ce} _d +end readonly def + +/BuildGlyph { + exch begin + CharStrings exch + 2 copy known not {pop /.notdef} if + true 3 1 roll get exec + end +} _d + +/BuildChar { + 1 index /Encoding get exch get + 1 index /BuildGlyph get exec +} _d + +FontName currentdict end definefont pop +end +%%EndProlog +mpldict begin +0 0 translate +0 0 576 360 rectclip +gsave +0 0 m +576 0 l +576 360 l +0 360 l +cl +1 setgray +fill +grestore +gsave +72 39.6 m +518.4 39.6 l +518.4 316.8 l +72 316.8 l +cl +1 setgray +fill +grestore +1.5 setlinewidth +1 setlinejoin +2 setlinecap +[] 0 setdash +0.69 setgray +gsave +72 39.6 446.4 277.2 rectclip +132.872727 39.6 m +132.872727 316.8 l +stroke +grestore +0.8 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +132.873 39.6 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +117.552 25.0062 translate +0 rotate +0 0 m /minus glyphshow +8.37891 0 m /zero glyphshow +14.7412 0 m /period glyphshow +17.9199 0 m /zero glyphshow +24.2822 0 m /four glyphshow +grestore +1.5 setlinewidth +2 setlinecap +0.69 setgray +gsave +72 39.6 446.4 277.2 rectclip +214.036364 39.6 m +214.036364 316.8 l +stroke +grestore +0.8 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +214.036 39.6 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +198.716 25.0062 translate +0 rotate +0 0 m /minus glyphshow +8.37891 0 m /zero glyphshow +14.7412 0 m /period glyphshow +17.9199 0 m /zero glyphshow +24.2822 0 m /two glyphshow +grestore +1.5 setlinewidth +2 setlinecap +0.69 setgray +gsave +72 39.6 446.4 277.2 rectclip +295.2 39.6 m +295.2 316.8 l +stroke +grestore +0.8 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +295.2 39.6 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +284.067 25.0062 translate +0 rotate +0 0 m /zero glyphshow +6.3623 0 m /period glyphshow +9.54102 0 m /zero glyphshow +15.9033 0 m /zero glyphshow +grestore +1.5 setlinewidth +2 setlinecap +0.69 setgray +gsave +72 39.6 446.4 277.2 rectclip +376.363636 39.6 m +376.363636 316.8 l +stroke +grestore +0.8 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +376.364 39.6 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +365.231 25.0062 translate +0 rotate +0 0 m /zero glyphshow +6.3623 0 m /period glyphshow +9.54102 0 m /zero glyphshow +15.9033 0 m /two glyphshow +grestore +1.5 setlinewidth +2 setlinecap +0.69 setgray +gsave +72 39.6 446.4 277.2 rectclip +457.527273 39.6 m +457.527273 316.8 l +stroke +grestore +0.8 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +457.527 39.6 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +446.394 25.0062 translate +0 rotate +0 0 m /zero glyphshow +6.3623 0 m /period glyphshow +9.54102 0 m /zero glyphshow +15.9033 0 m /four glyphshow +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +72 39.6 m +72 316.8 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -2 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +72 39.6 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +92.290909 39.6 m +92.290909 316.8 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -2 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +92.2909 39.6 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +112.581818 39.6 m +112.581818 316.8 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -2 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +112.582 39.6 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +153.163636 39.6 m +153.163636 316.8 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -2 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +153.164 39.6 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +173.454545 39.6 m +173.454545 316.8 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -2 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +173.455 39.6 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +193.745455 39.6 m +193.745455 316.8 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -2 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +193.745 39.6 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +234.327273 39.6 m +234.327273 316.8 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -2 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +234.327 39.6 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +254.618182 39.6 m +254.618182 316.8 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -2 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +254.618 39.6 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +274.909091 39.6 m +274.909091 316.8 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -2 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +274.909 39.6 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +315.490909 39.6 m +315.490909 316.8 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -2 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +315.491 39.6 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +335.781818 39.6 m +335.781818 316.8 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -2 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +335.782 39.6 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +356.072727 39.6 m +356.072727 316.8 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -2 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +356.073 39.6 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +396.654545 39.6 m +396.654545 316.8 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -2 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +396.655 39.6 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +416.945455 39.6 m +416.945455 316.8 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -2 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +416.945 39.6 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +437.236364 39.6 m +437.236364 316.8 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -2 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +437.236 39.6 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +477.818182 39.6 m +477.818182 316.8 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -2 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +477.818 39.6 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +498.109091 39.6 m +498.109091 316.8 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -2 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +498.109 39.6 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +518.4 39.6 m +518.4 316.8 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -2 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +518.4 39.6 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +282.669 11.3344 translate +0 rotate +0 0 m /v glyphshow +5.91797 0 m /comma glyphshow +9.09668 0 m /space glyphshow +12.2754 0 m /H glyphshow +19.7949 0 m /z glyphshow +grestore +1.5 setlinewidth +2 setlinecap +0.69 setgray +gsave +72 39.6 446.4 277.2 rectclip +72 77.4 m +518.4 77.4 l +stroke +grestore +0.8 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +72 77.4 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +34.3594 73.6031 translate +0 rotate +0 0 m /minus glyphshow +8.37891 0 m /zero glyphshow +14.7412 0 m /period glyphshow +17.9199 0 m /zero glyphshow +24.2822 0 m /four glyphshow +grestore +1.5 setlinewidth +2 setlinecap +0.69 setgray +gsave +72 39.6 446.4 277.2 rectclip +72 127.8 m +518.4 127.8 l +stroke +grestore +0.8 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +72 127.8 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +34.3594 124.003 translate +0 rotate +0 0 m /minus glyphshow +8.37891 0 m /zero glyphshow +14.7412 0 m /period glyphshow +17.9199 0 m /zero glyphshow +24.2822 0 m /two glyphshow +grestore +1.5 setlinewidth +2 setlinecap +0.69 setgray +gsave +72 39.6 446.4 277.2 rectclip +72 178.2 m +518.4 178.2 l +stroke +grestore +0.8 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +72 178.2 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +42.7344 174.403 translate +0 rotate +0 0 m /zero glyphshow +6.3623 0 m /period glyphshow +9.54102 0 m /zero glyphshow +15.9033 0 m /zero glyphshow +grestore +1.5 setlinewidth +2 setlinecap +0.69 setgray +gsave +72 39.6 446.4 277.2 rectclip +72 228.6 m +518.4 228.6 l +stroke +grestore +0.8 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +72 228.6 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +42.7344 224.803 translate +0 rotate +0 0 m /zero glyphshow +6.3623 0 m /period glyphshow +9.54102 0 m /zero glyphshow +15.9033 0 m /two glyphshow +grestore +1.5 setlinewidth +2 setlinecap +0.69 setgray +gsave +72 39.6 446.4 277.2 rectclip +72 279 m +518.4 279 l +stroke +grestore +0.8 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +72 279 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +42.7344 275.203 translate +0 rotate +0 0 m /zero glyphshow +6.3623 0 m /period glyphshow +9.54102 0 m /zero glyphshow +15.9033 0 m /four glyphshow +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +72 39.6 m +518.4 39.6 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-2 0 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +72 39.6 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +72 52.2 m +518.4 52.2 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-2 0 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +72 52.2 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +72 64.8 m +518.4 64.8 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-2 0 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +72 64.8 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +72 90 m +518.4 90 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-2 0 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +72 90 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +72 102.6 m +518.4 102.6 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-2 0 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +72 102.6 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +72 115.2 m +518.4 115.2 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-2 0 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +72 115.2 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +72 140.4 m +518.4 140.4 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-2 0 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +72 140.4 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +72 153 m +518.4 153 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-2 0 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +72 153 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +72 165.6 m +518.4 165.6 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-2 0 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +72 165.6 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +72 190.8 m +518.4 190.8 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-2 0 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +72 190.8 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +72 203.4 m +518.4 203.4 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-2 0 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +72 203.4 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +72 216 m +518.4 216 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-2 0 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +72 216 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +72 241.2 m +518.4 241.2 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-2 0 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +72 241.2 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +72 253.8 m +518.4 253.8 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-2 0 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +72 253.8 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +72 266.4 m +518.4 266.4 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-2 0 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +72 266.4 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +72 291.6 m +518.4 291.6 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-2 0 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +72 291.6 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +72 304.2 m +518.4 304.2 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-2 0 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +72 304.2 o +grestore +0.5 setlinewidth +2 setlinecap +0.502 setgray +gsave +72 39.6 446.4 277.2 rectclip +72 316.8 m +518.4 316.8 l +stroke +grestore +0.6 setlinewidth +0 setlinecap +0 setgray +gsave +/o { +gsave +newpath +translate +0.6 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-2 0 l + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +72 316.8 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +28.2812 158.989 translate +90 rotate +0 0 m /p glyphshow +6.34766 0 m /h glyphshow +12.6855 0 m /i glyphshow +15.4639 0 m /comma glyphshow +18.6426 0 m /space glyphshow +21.8213 0 m /r glyphshow +25.9326 0 m /a glyphshow +32.0605 0 m /d glyphshow +grestore +1 setlinewidth +2 setlinecap +gsave +72 39.6 446.4 277.2 rectclip +72 178.2 m +518.4 178.2 l +stroke +grestore +gsave +72 39.6 446.4 277.2 rectclip +295.2 39.6 m +295.2 316.8 l +stroke +grestore +0 setlinejoin +0 setlinecap +gsave +/o { +gsave +newpath +translate +1.0 setlinewidth +0 setlinejoin + +0 setlinecap + +3 -0 m +-3 3 l +-3 -3 l +cl + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +518.4 178.2 o +grestore +gsave +/o { +gsave +newpath +translate +1.0 setlinewidth +0 setlinejoin + +0 setlinecap + +0 3 m +-3 -3 l +3 -3 l +cl + +gsave +0 setgray +fill +grestore +stroke +grestore +} bind def +295.2 316.8 o +grestore +0.8 setlinewidth +2 setlinecap +gsave +72 39.6 m +72 316.8 l +stroke +grestore +gsave +518.4 39.6 m +518.4 316.8 l +stroke +grestore +gsave +72 39.6 m +518.4 39.6 l +stroke +grestore +gsave +72 316.8 m +518.4 316.8 l +stroke +grestore +/DejaVuSans 12.000 selectfont +gsave + +158.216 322.8 translate +0 rotate +0 0 m /uni0413 glyphshow +7.31836 0 m /uni0440 glyphshow +14.9355 0 m /uni0430 glyphshow +22.2891 0 m /uni0444 glyphshow +32.5488 0 m /uni0438 glyphshow +40.3477 0 m /uni043A glyphshow +47.5957 0 m /space glyphshow +51.4102 0 m /uni0437 glyphshow +57.791 0 m /uni0430 glyphshow +65.1445 0 m /uni0432 glyphshow +72.2168 0 m /uni0438 glyphshow +80.0156 0 m /uni0441 glyphshow +86.6133 0 m /uni0438 glyphshow +94.4121 0 m /uni043C glyphshow +103.465 0 m /uni043E glyphshow +110.807 0 m /uni0441 glyphshow +117.404 0 m /uni0442 glyphshow +124.395 0 m /uni0438 glyphshow +132.193 0 m /space glyphshow +136.008 0 m /uni0444 glyphshow +146.268 0 m /uni0430 glyphshow +153.621 0 m /uni0437 glyphshow +160.002 0 m /uni044B glyphshow +169.477 0 m /space glyphshow +173.291 0 m /uni043E glyphshow +180.633 0 m /uni0442 glyphshow +187.623 0 m /space glyphshow +191.438 0 m /uni0447 glyphshow +198.527 0 m /uni0430 glyphshow +205.881 0 m /uni0441 glyphshow +212.479 0 m /uni0442 glyphshow +219.469 0 m /uni043E glyphshow +226.811 0 m /uni0442 glyphshow +233.801 0 m /uni044B glyphshow +243.275 0 m /parenleft glyphshow +247.957 0 m /uni0441 glyphshow +254.555 0 m /uni0445 glyphshow +261.656 0 m /five glyphshow +269.291 0 m /parenright glyphshow +grestore +1 setlinewidth +0 setlinecap +0.8 setgray +gsave +507.4 303.8 m +511.4 303.8 l +512.733333 303.8 513.4 304.466667 513.4 305.8 c +513.4 309.8 l +513.4 311.133333 512.733333 311.8 511.4 311.8 c +507.4 311.8 l +506.066667 311.8 505.4 311.133333 505.4 309.8 c +505.4 305.8 l +505.4 304.466667 506.066667 303.8 507.4 303.8 c +cl +gsave +1 setgray +fill +grestore +stroke +grestore + +end +showpage diff --git a/ProninVV/aufgabe-1-data-structures/graphics/zadanie3.png b/ProninVV/aufgabe-1-data-structures/graphics/zadanie3.png new file mode 100644 index 0000000000000000000000000000000000000000..dbd8145acef54dbf0fe344ef2cbacbcf5c690f98 GIT binary patch literal 50383 zcmeFa2UJwswk=v_w+Xk37!ceFihy87G6qyYLCGLNMMQE22?dxoiUBPNq67m$VoA=R zBBG#VB@{sO1~*U2A6>d= z-69HwvQ*~SVMPjMz7&Nrr)}YU{L7zCyRPDYL~NwhZIsL}*w~-7(x;p_Yhz(zZewD2 zZlj&Pm9?R{*=~WII|O#{Z@g$@V__{KC}{fEcL<8+$#U z^^a{KFPdam-HgdsyC3uH!69z%YwRmLmML=OpYyfVa;mE;>SakDo4C-`)zej7)gbQ4 z?A|A2eW{2!;P}a)Zg=OvqatSaOa6itxR{xj+ku0#H~jhwMN0ZPW%jSX-99vH?yoM9{Q*DL;@?a3 z?_Km`C;U$jnw#w4w_Aew4Hi6HT!$a;GhJk}f0mHr;6-8fWh&u{(xUb~OKkR2C|Aij zTN8ac+01G`dvn@HzujAl82~3! z9GAY%5}%$J$j{F&eYjIE;lig!9t(e`EN>za=E{+xK=Glb2MY5=mXJ3KXVbZKU~FuR z7R>C;mV8y>pY>?3vC+HRYgtRxqBRq3%1#Kie-f%MuTC^hwCmQiZ7&TuI6j{;S1|O| zkGS_eUN7&i;c!{*SRnE)x6o19rJ$$KuM>OT6=Fl zzil#U?V*pGEcVZ4FYybL^A(Uie%y;|yH19>`?3v-EDlrL;x~|=$=@g}tg+1f5dO1n z`FNjegNV(sBJmM_tjQBx5+5(G?1{(wK8ugkJpc4qh*@ra_Uuztx=wVgUS3B;WK3yl zYhYxAN+j>DU5Y~;pOr>>YWJRfGdCnG%y(NIS;p^QUyF>?ShKRShO~ToY+RFKnO|5q zTvk2Abh<&EjZFnaoGc&WB48Pq5cPG=hwr=&U+$Sn}`p&w&aST!R zWzkxxrN#`i+BEO#BQz^3E1O(awMx?>$?1t**{VJA{`;RM*Ez~fqk9M|rPNd9gH`cJKm@OHz_kqk1=~*sBZ|v*$%N=>xOxqj=yl{&!y`_lS~;A@&O`?SXk5&jXsx$o>)KBTdzCN@@Zf^a8S)zL1HZU zXgWSHBsA2g+SSD+tK)NIYhO)iU2jb5r$F)3LNyjw*X=WT@!|!KN~G$E?V1V2ZnNej zm{i3nGWV;<%ipcL)VQ?PdEk>#bwW6nKJ>NvSzEdYqljZ%*vig-#V|MdUG*|U-4i?`M%zCkMtGt(RT|&a1 z6OZ=DsOdO_ObSUUD|;1+k7y0Gl^lAoumS?R>=PVVl+Q#j<8bSkijDzk3a z`5PNfPmT}Sj(%@gksNPaA&{G!TUF#RHP%|NsM+uJv%gh0H8*Qi=r~2!#>hO_@&)mX>UhT^-eKTE z(6Bp~@hi7ksyK78)LO(LiJ?Y|{ZS1$?x*L?o5%gGW$KZa-EY7B7K>P=WTJ~m+<%G1 ztErQoEl}!e*xN1cG^|e6Um;cpQOJ9BJ+_HQ!Ujnf=bMwKee^T28q$Gk)l4c@PPHub zgxsg;d_H=@G7d3yqa{B28k{bpPm6-q(lh#HZ#ww4T1C(}tdsTfmho-c^z1l2h(0wj zpb#m2Yqd^ew03&Z5H_MFS%6+9!gw?enWHHuC#N}bOU&DDmBAE&p7`-{xxBj@Qhfe7J-z6O3FjcDU~g-dzJ{uu zT@oH5AG0ru%3PfufGZd z1(YZLWL?BZzg`uwYPx~lT%PG<|2g`!8gsb2%!8HB%iEhftSme%&{6jK_3Mt@rvwK92_yH%~C@u zD_zFhw+^+JZ%kuiS#>PbFF)P!Wlv9V?mnAYN*P6L z5c0N89oNcO@#zRGFI*8Z(Ks%=O4 zsn)^(m2^AP=BB2L_+xd3LwsC(y!V3#O5uG0MlB!x90yB|vaVaFY4VsHjpI}o#LbS9 z=k9TFaa;itD#l2@`eXB~s>Z}Mh;RGM>!Oa_ zSr?9wDJv&e*56#hhfNDQ0h?K@o>c>G)8mZFgdYQO=)B!-h1p{1z=!?Y!j-`qO$ddr4nPTyjs(bkG zH4)p6VBBq$K{^#^sXE&=8<#2m?tG90wLHz%m`*jXeEC|UGZqM;qxk973Ohg_L92QM zopPM{4Puvyv*(il#YHf3Z^pn~g0gCAw6?3il#0LbsbAeVrx}qxX?hsB)~BT~;B-e7 z6~S0D$;1y3DHzX#{A6EWpHW3j0Qq4g)u4VG`}Ppu>I$_Ot?(;XuEe+OW}#TjUt}^l zk3yO5Z(X}FMt4`eW!{D_z-(gG8zh`7I~d9IJUTyOWM^U#KEE?2y(dmJO8snebF+i# zg9i`vkX%1tP2yd-AK$;5h`-cr+Jw3Oe_4dupj$y@9_^NPak!|JPNPmLSLG6Zhnj*Of0 zy;bqlD)JQk_c!z{t_Pm!Y%6)L!??>KUhUYMIpUFVv}Rzm?YU~F1zrz zp`Br6h9r}!+Snx2R+NUwWhRNQETT9dj*97wlsrGmCTwhm==4QJO}n{|LnGTIvxxD1 zgkG{e@>>z5D$^->uT9&@PKJ4QA`)4}KIF&vBX`*iN4&kflub?-#6=zDaCqC8$blH( z9T?b?*qvPOVm#DYQ8Yf*8YK5IgkRX`fjSgOdf#oOkUApqU5-secQWWcI#i7c)ib(!fK5L4F6 zN7Atf3@X9dxk&><8*A=v5bd%%b?TH3W7Mkn`)FUIDuCQ}8C3)saS!?2JK;O^-c_1@ z`}Qqg`(eMDbI*eOz)RnLi#+xGh!0mJLR;>;Z;siyZ{Mm5W)3Qb_m1E&IEu}ot`E$#CJxY%L?S9>m9x97#%Ea&ZRDFP^ScoZ$R-C@?NXRRKXMfv`x zbnz?-&sHQYJaU;o{;12AN3s_SmBuqp6c<0>P>X{+JS3PsQEL1cXT7Qdn}B}p+O