diff --git a/lukovnikovde/docs/data/DataStructure.py b/lukovnikovde/docs/data/DataStructure.py new file mode 100644 index 0000000..32e6ab5 --- /dev/null +++ b/lukovnikovde/docs/data/DataStructure.py @@ -0,0 +1,498 @@ +import random as rnd +import time +import csv +import matplotlib.pyplot as plt +############################################################################################# + +def sort_list(name_list): + l = len(name_list) + for i in range(l - 1): + for j in range(l - i - 1): + if name_list[j][0] > name_list[j + 1][0]: + name_list[j], name_list[j + 1] = name_list[j + 1], name_list[j] + return name_list + +def hash_key(name): + h_key = sum(ord(ch) for ch in name) + return h_key + +def create_name_phone(i): + name = f"User_{i:03d}" + phone = f"{rnd.randint(100, 999)}-{rnd.randint(100, 999)}" + return (name, phone) + +def file_insert(results): + with open("results.csv", "w", encoding = "utf-8-sig", newline = "") as file: + writer = csv.writer(file) + writer.writerows(results) + +def drow(time, color_fun): + x = [] + y = [] + for key in time: + x.append(key) + y.append(time[key] * 1000) + plt.plot(x, y, marker = ".", color = color_fun, markersize = 2, alpha = 0.9) + + + +########################################################################################################################### + +def ll_insert(head, name, phone): + next_node = {'name': name, 'phone': phone, 'next': None} + if head is None: return next_node + + running = head + while running is not None: + if running['name'] == name: + running['phone'] = phone + return head + running = running['next'] + + running = head + while running['next'] is not None: running = running['next'] + running['next'] = next_node + return head + +def ll_find(head, name): + running = head + + while True: + if running['name'] == name: + return running['phone'] + running = running['next'] + if running is None: break + + return None + + +def ll_delete(head, name): + running = head + + if running['name'] == name: + return head['next'] + + while running['next']['name'] != name: + running = running['next'] + if running['next']['next'] is None: + if running['next']['name'] != name: + return head + if running['next']['next'] is None: + running['next'] = None + else: running['next'] = running['next']['next'] + + return head + + +def ll_list_all(head): + name_list = [] + running = head + while running is not None: + name_list.append((running['name'], running['phone'])) + running = running['next'] + return name_list + +################################################################################################################################ + + +def LinkedList(head, phone_book): + + start_insert = time.perf_counter() + for i in range(len(phone_book)): + + head = ll_insert(head, phone_book[i][0], phone_book[i][1]) + #print(head) + end_insert = time.perf_counter() + time_insert = end_insert - start_insert + + start_find = time.perf_counter() + for _ in range(100): + name = create_name_phone(rnd.randint(0, 999))[0] + phone = ll_find(head, name) + #print(name, ":", phone) + end_find = time.perf_counter() + time_find = end_find - start_find + + + start_delete = time.perf_counter() + for i in range(110): + if i <= 99: name = f"User_{rnd.randint(0,999):03d}" + else: name = f"None_{i:03d}" + head = ll_delete(head, name) + end_delete = time.perf_counter() + time_delete = end_delete - start_delete + + + start_list = time.perf_counter() + name_list = sort_list(ll_list_all(head)) + #print(*name_list) + end_list = time.perf_counter() + time_list = end_list - start_list + + return (time_insert, time_find, time_delete, time_list) + +######################################################################################################### + +def ht_insert(buckest, name, phone): + index = hash_key(name) % len(buckest) + for i, (Name, Phone) in enumerate(buckest[index]): + if Name == name: + buckest[index][i] = (name, phone) + return buckest + buckest[index].append((name, phone)) + return buckest + +def ht_find(buckest, name): + index = hash_key(name) % len(buckest) + for (Name, Phone) in buckest[index]: + if Name == name: + return Phone + return None + +def ht_list_all(buckest): + + name_list = [] + + for index in range(len(buckest)): + for i, (name, phone) in enumerate(buckest[index]): + name_list.append((name, phone)) + + name_list = sort_list(name_list) + + return name_list + + +def ht_delete(buckest, name): + index = hash_key(name) % len(buckest) + for i, (Name, Phone) in enumerate(buckest[index]): + if Name == name: + del buckest[index][i] + return buckest + + +#################################################################################################### + +def HashTable(buckest, phone_book): + + + start_insert = time.perf_counter() + for i in range(len(phone_book)): + + buckest = ht_insert(buckest, phone_book[i][0], phone_book[i][1]) + #print(buckest) + end_insert = time.perf_counter() + time_insert = end_insert - start_insert + + + start_find = time.perf_counter() + for _ in range(100): + name = create_name_phone(rnd.randint(0, 999))[0] + phone = ht_find(buckest, name) + #print(name, ":", phone) + end_find = time.perf_counter() + time_find = end_find - start_find + + + start_delete = time.perf_counter() + for i in range(110): + if i <= 99: name = f"User_{rnd.randint(0,999):03d}" + else: name = f"None_{i:03d}" + buckest = ht_delete(buckest, name) + end_delete = time.perf_counter() + time_delete = end_delete - start_delete + + + start_list = time.perf_counter() + name_list = sort_list(ht_list_all(buckest)) + #print(*name_list) + end_list = time.perf_counter() + time_list = end_list - start_list + + return (time_insert, time_find, time_delete, time_list) + +################################################################################################# + +def bst_insert(root, name, phone): + + running = root + + if running is None: + root = {'name': name, 'phone': phone, 'left': None, 'right': None} + return root + while True: + node = hash_key(running['name']) + sheet = hash_key(name) + if node < sheet: + if running['right'] is None: + running['right'] = {'name': name, 'phone': phone, 'left': None, 'right': None} + return root + running = running['right'] + elif node > sheet: + if running['left'] is None: + running['left'] = {'name': name, 'phone': phone, 'left': None, 'right': None} + return root + running = running['left'] + else: + running['phone'] = phone + return root + +def bst_find(root, name): + + running = root + + while running is not None: + node = hash_key(running['name']) + sheet = hash_key(name) + if name == running['name']: + return running['phone'] + elif node < sheet: + running = running['right'] + else: + running = running['left'] + + return None + +def bst_list_all(root, name_list = []): + if root is None: + return + name_list.append((root['name'], root['phone'])) + bst_list_all(root['left'], name_list) + bst_list_all(root['right'], name_list) + name_list = sort_list(name_list) + return name_list + +def bst_delete(root, name): + + if root is None: + return None + if hash_key(name) < hash_key(root['name']): + root['left'] = bst_delete(root['left'], name) + elif hash_key(name) > hash_key(root['name']): + root['right'] = bst_delete(root['right'], name) + else: + + if root['left'] is None and root['right'] is None: + return None + + if root['left'] is None: + return root['right'] + if root['right'] is None: + return root['left'] + + min_node = root['right'] + while min_node['left'] is not None: + min_node = min_node['left'] + + root['name'] = min_node['name'] + root['phone'] = min_node['phone'] + + root['right'] = bst_delete(root['right'], min_node['name']) + + return root + +################################################################################################# + +def BinarySearchTree(root, phone_book): + + start_insert = time.perf_counter() + for i in range(len(phone_book)): + + root = bst_insert(root, phone_book[i][0], phone_book[i][1]) + #print(buckest) + end_insert = time.perf_counter() + time_insert = end_insert - start_insert + + + start_find = time.perf_counter() + for _ in range(100): + name = create_name_phone(rnd.randint(0, 999))[0] + phone = bst_find(root, name) + #print(name, ":", phone) + end_find = time.perf_counter() + time_find = end_find - start_find + + + start_delete = time.perf_counter() + for i in range(110): + if i <= 99: name = f"User_{rnd.randint(0,999):03d}" + else: name = f"None_{i:03d}" + root = bst_delete(root, name) + end_delete = time.perf_counter() + time_delete = end_delete - start_delete + + + start_list = time.perf_counter() + name_list = sort_list(bst_list_all(root)) + #print(*name_list) + end_list = time.perf_counter() + time_list = end_list - start_list + + return (time_insert, time_find, time_delete, time_list) + +################################################################################################ +def main(): + + phone_book = [] + for i in range(1000): + phone_book.append(create_name_phone(i)) + for _ in range(9000): + phone_book.append(create_name_phone(rnd.randint(0, 999))) + + phone_book_not_sorted = phone_book.copy() + rnd.shuffle(phone_book_not_sorted) + + phone_book_sorted = phone_book.copy() + phone_book_sorted = sort_list(phone_book_sorted) + replay = 10 + + + Time_ll_not_sorted = [] + Time_ll_sorted = [] + + Time_average_ll_not_sorted = {'insert': 0, 'find': 0, 'delete': 0, 'list': 0} + Time_average_ll_sorted = {'insert': 0, 'find': 0, 'delete': 0, 'list': 0} + + print("============================================ TESTING LINKEDLIST =====================================\n") + print('Not sorted: ') + for _ in range(replay): + time_ll_not_sorted = LinkedList(None, phone_book_not_sorted) + Time_ll_not_sorted.append({'insert': time_ll_not_sorted[0], 'find': time_ll_not_sorted[1], 'delete': time_ll_not_sorted[2], 'list': time_ll_not_sorted[3]}) + for i, key in enumerate(Time_average_ll_not_sorted): + Time_average_ll_not_sorted[key] += time_ll_not_sorted[i]/replay + for i in range(replay): + print(Time_ll_not_sorted[i]) + print("Average:", Time_average_ll_not_sorted, "\n\n") + + print('Sorted:') + for _ in range(replay): + time_ll_sorted = LinkedList(None, phone_book_sorted) + Time_ll_sorted.append({'insert': time_ll_sorted[0], 'find': time_ll_sorted[1], 'delete': time_ll_sorted[2], 'list': time_ll_sorted[3]}) + for i, key in enumerate(Time_average_ll_sorted): + Time_average_ll_sorted[key] += time_ll_sorted[i]/replay + for i in range(replay): + print(Time_ll_not_sorted[i]) + print("Average:", Time_average_ll_sorted, "\n\n") + + + + Time_ht_not_sorted = [] + Time_ht_sorted = [] + + Time_average_ht_not_sorted = {'insert': 0, 'find': 0, 'delete': 0, 'list': 0} + Time_average_ht_sorted = {'insert': 0, 'find': 0, 'delete': 0, 'list': 0} + + print("============================================ TESTING HASHTABLE =====================================\n") + print('Not sorted: ') + for _ in range(replay): + time_ht_not_sorted = HashTable([[] for _ in range(100)], phone_book_not_sorted) + Time_ht_not_sorted.append({'insert': time_ht_not_sorted[0], 'find': time_ht_not_sorted[1], 'delete': time_ht_not_sorted[2], 'list': time_ht_not_sorted[3]}) + for i, key in enumerate(Time_average_ht_not_sorted): + Time_average_ht_not_sorted[key] += time_ht_not_sorted[i]/replay + for i in range(replay): + print(Time_ht_not_sorted[i]) + print(f"Average: {Time_average_ht_not_sorted}\n\n") + + print('Sorted: ') + for _ in range(replay): + time_ht_sorted = HashTable([[] for _ in range(100)], phone_book_sorted) + Time_ht_sorted.append({'insert': time_ht_sorted[0], 'find': time_ht_sorted[1], 'delete': time_ht_sorted[2], 'list': time_ht_sorted[3]}) + for i, key in enumerate(Time_average_ht_sorted): + Time_average_ht_sorted[key] += time_ht_sorted[i]/replay + for i in range(replay): + print(Time_ht_sorted[i]) + print(f"Average: {Time_average_ht_sorted}\n\n") + + + + Time_bst_not_sorted = [] + Time_bst_sorted = [] + + Time_average_bst_not_sorted = {'insert': 0, 'find': 0, 'delete': 0, 'list': 0} + Time_average_bst_sorted = {'insert': 0, 'find': 0, 'delete': 0, 'list': 0} + + print("============================================ TESTING BINARYSEARCHTREE =====================================\n") + print('Not sorted: ') + for _ in range(replay): + time_bst_not_sorted = BinarySearchTree(None, phone_book_not_sorted) + Time_bst_not_sorted.append({'insert': time_bst_not_sorted[0], 'find': time_bst_not_sorted[1], 'delete': time_bst_not_sorted[2], 'list': time_bst_not_sorted[3]}) + for i, key in enumerate(Time_average_bst_not_sorted): + Time_average_bst_not_sorted[key] += time_bst_not_sorted[i]/replay + for i in range(replay): + print(Time_bst_not_sorted[i]) + print(f"Average: {Time_average_bst_not_sorted}\n\n") + + print('Sorted: ') + for _ in range(replay): + time_bst_sorted = BinarySearchTree(None, phone_book_sorted) + Time_bst_sorted.append({'insert': time_bst_sorted[0], 'find': time_bst_sorted[1], 'delete': time_bst_sorted[2], 'list': time_bst_sorted[3]}) + for i, key in enumerate(Time_average_bst_sorted): + Time_average_bst_sorted[key] += time_bst_sorted[i]/replay + for i in range(replay): + print(Time_bst_sorted[i]) + print(f"Average: {Time_average_bst_sorted}\n\n") + print("=============================================== END TESTING ================================================") + + results = [["Структура", "Режим", "Операция", "Время(мс)"]] + for i in range(replay): + results.append(["LinkedList", "Случайный", "вставка", Time_ll_not_sorted[i]["insert"]]) + results.append(["LinkedList", "Случайный", "поиск", Time_ll_not_sorted[i]["find"]]) + results.append(["LinkedList", "Случайный", "удаление", Time_ll_not_sorted[i]["delete"]]) + results.append(["LinkedList", "Случайный", "формирование списка", Time_ll_not_sorted[i]["list"]]) + + results.append(["LinkedList", "Упорядоченный", "вставка", Time_ll_sorted[i]["insert"]]) + results.append(["LinkedList", "Упорядоченный", "поиск", Time_ll_sorted[i]["find"]]) + results.append(["LinkedList", "Упорядоченный", "удаление", Time_ll_sorted[i]["delete"]]) + results.append(["LinkedList", "Упорядоченный", "формирование списка", Time_ll_sorted[i]["list"]]) + + for i in range(replay): + results.append(["HashTable", "Случайный", "вставка", Time_ht_not_sorted[i]["insert"]]) + results.append(["HashTable", "Случайный", "поиск", Time_ht_not_sorted[i]["find"]]) + results.append(["HashTable", "Случайный", "удаление", Time_ht_not_sorted[i]["delete"]]) + results.append(["HashTable", "Случайный", "формирование списка", Time_ht_not_sorted[i]["list"]]) + + results.append(["HashTable", "Упорядоченный", "вставка", Time_ht_sorted[i]["insert"]]) + results.append(["HashTable", "Упорядоченный", "поиск", Time_ht_sorted[i]["find"]]) + results.append(["HashTable", "Упорядоченный", "удаление", Time_ht_sorted[i]["delete"]]) + results.append(["HashTable", "Упорядоченный", "формирование списка", Time_ht_sorted[i]["list"]]) + + for i in range(replay): + results.append(["BinarySearchTree", "Случайный", "вставка", Time_bst_not_sorted[i]["insert"]]) + results.append(["BinarySearchTree", "Случайный", "поиск", Time_bst_not_sorted[i]["find"]]) + results.append(["BinarySearchTree", "Случайный", "удаление", Time_bst_not_sorted[i]["delete"]]) + results.append(["BinarySearchTree", "Случайный", "формирование списка", Time_bst_not_sorted[i]["list"]]) + + results.append(["BinarySearchTree", "Упорядоченный", "вставка", Time_bst_sorted[i]["insert"]]) + results.append(["BinarySearchTree", "Упорядоченный", "поиск", Time_bst_sorted[i]["find"]]) + results.append(["BinarySearchTree", "Упорядоченный", "удаление", Time_bst_sorted[i]["delete"]]) + results.append(["BinarySearchTree", "Упорядоченный", "формирование списка", Time_bst_sorted[i]["list"]]) + + for i in range(1, len(results) - 1): + results[i][3] *= 1000 + file_insert(results) + + plt.figure(figsize = (16, 9)) + plt.xlabel("Операция") + plt.ylabel("Время мс") + + drow(Time_average_ll_not_sorted, "blue") + drow(Time_average_ll_sorted, "green") + drow(Time_average_ht_not_sorted, "#FF8800") + drow(Time_average_ht_sorted, "#FF0000") + drow(Time_average_bst_not_sorted, "#464219") + drow(Time_average_bst_sorted, "#FBFF00") + + text = """ + синий - LinkedList (not sorted) ораньжевый - HashTable (not sorted) коричневый - BST (not sorted) + зеленый - LinkedList (sorted) красный - HashTable (sorted) желтый - BST (sorted) + """ + # plt.subplots_adjust(bottom =0.3) + plt.figtext(0.1, 0.02, text, wrap = True, fontsize = 9, va = 'bottom') + plt.savefig("time_schedule.png") + plt.show() + +if __name__ == "__main__": + main() + + + + diff --git a/lukovnikovde/docs/data/resalts.csv b/lukovnikovde/docs/data/resalts.csv new file mode 100644 index 0000000..ed393a5 --- /dev/null +++ b/lukovnikovde/docs/data/resalts.csv @@ -0,0 +1,241 @@ +Структура,Режим,Операция,Время(мс) +LinkedList,Случайный,вставка,311.8601000023773 +LinkedList,Случайный,поиск,3.0993999971542507 +LinkedList,Случайный,удаление,6.629099996644072 +LinkedList,Случайный,формирование списка,60.98759999440517 +LinkedList,Упорядоченный,вставка,332.72419999411795 +LinkedList,Упорядоченный,поиск,3.1196000054478645 +LinkedList,Упорядоченный,удаление,5.813899988424964 +LinkedList,Упорядоченный,формирование списка,39.0969000000041 +LinkedList,Случайный,вставка,333.36899999994785 +LinkedList,Случайный,поиск,3.6326999979792163 +LinkedList,Случайный,удаление,5.94719999935478 +LinkedList,Случайный,формирование списка,68.81969999813009 +LinkedList,Упорядоченный,вставка,347.4948999937624 +LinkedList,Упорядоченный,поиск,3.69440000213217 +LinkedList,Упорядоченный,удаление,6.888300005812198 +LinkedList,Упорядоченный,формирование списка,46.8346000125166 +LinkedList,Случайный,вставка,309.86330000450835 +LinkedList,Случайный,поиск,2.868099996703677 +LinkedList,Случайный,удаление,6.037400002242066 +LinkedList,Случайный,формирование списка,61.938399987411685 +LinkedList,Упорядоченный,вставка,338.7425999972038 +LinkedList,Упорядоченный,поиск,3.638499998487532 +LinkedList,Упорядоченный,удаление,7.441800000378862 +LinkedList,Упорядоченный,формирование списка,39.537500008009374 +LinkedList,Случайный,вставка,310.5929000012111 +LinkedList,Случайный,поиск,3.468300012173131 +LinkedList,Случайный,удаление,7.5059000082546845 +LinkedList,Случайный,формирование списка,64.28520000190474 +LinkedList,Упорядоченный,вставка,335.0771999976132 +LinkedList,Упорядоченный,поиск,3.0857999954605475 +LinkedList,Упорядоченный,удаление,6.151499997940846 +LinkedList,Упорядоченный,формирование списка,38.384100000257604 +LinkedList,Случайный,вставка,333.7921000056667 +LinkedList,Случайный,поиск,6.480700001702644 +LinkedList,Случайный,удаление,8.09099999605678 +LinkedList,Случайный,формирование списка,63.44879999232944 +LinkedList,Упорядоченный,вставка,312.329199994565 +LinkedList,Упорядоченный,поиск,3.115400002570823 +LinkedList,Упорядоченный,удаление,5.880099997739308 +LinkedList,Упорядоченный,формирование списка,39.14569999324158 +LinkedList,Случайный,вставка,306.0167000076035 +LinkedList,Случайный,поиск,3.3414000063203275 +LinkedList,Случайный,удаление,6.772799999453127 +LinkedList,Случайный,формирование списка,58.58910000824835 +LinkedList,Упорядоченный,вставка,317.93599999218713 +LinkedList,Упорядоченный,поиск,4.178699993644841 +LinkedList,Упорядоченный,удаление,6.598799998755567 +LinkedList,Упорядоченный,формирование списка,43.91350000514649 +LinkedList,Случайный,вставка,326.0805000027176 +LinkedList,Случайный,поиск,3.511100003379397 +LinkedList,Случайный,удаление,7.0478000125149265 +LinkedList,Случайный,формирование списка,65.27820001065265 +LinkedList,Упорядоченный,вставка,342.3164999985602 +LinkedList,Упорядоченный,поиск,2.997699994011782 +LinkedList,Упорядоченный,удаление,6.1990999965928495 +LinkedList,Упорядоченный,формирование списка,38.459399991552345 +LinkedList,Случайный,вставка,352.4922000069637 +LinkedList,Случайный,поиск,3.4684999991441146 +LinkedList,Случайный,удаление,6.042299995897338 +LinkedList,Случайный,формирование списка,58.957499990356155 +LinkedList,Упорядоченный,вставка,336.49819999118336 +LinkedList,Упорядоченный,поиск,4.811599996173754 +LinkedList,Упорядоченный,удаление,7.25540000712499 +LinkedList,Упорядоченный,формирование списка,42.60240000439808 +LinkedList,Случайный,вставка,335.7185000058962 +LinkedList,Случайный,поиск,3.1072999991010875 +LinkedList,Случайный,удаление,7.647199992788956 +LinkedList,Случайный,формирование списка,61.90960000094492 +LinkedList,Упорядоченный,вставка,348.60630000184756 +LinkedList,Упорядоченный,поиск,3.2524999987799674 +LinkedList,Упорядоченный,удаление,7.037800009129569 +LinkedList,Упорядоченный,формирование списка,45.27720001351554 +LinkedList,Случайный,вставка,349.1418000048725 +LinkedList,Случайный,поиск,3.576899995096028 +LinkedList,Случайный,удаление,6.985800006077625 +LinkedList,Случайный,формирование списка,61.900600005174056 +LinkedList,Упорядоченный,вставка,341.29359999496955 +LinkedList,Упорядоченный,поиск,3.3715000026859343 +LinkedList,Упорядоченный,удаление,5.9412999980850145 +LinkedList,Упорядоченный,формирование списка,39.60160000133328 +HashTable,Случайный,вставка,36.995000002207235 +HashTable,Случайный,поиск,0.5348999984562397 +HashTable,Случайный,удаление,0.5553000082727522 +HashTable,Случайный,формирование списка,92.14980000979267 +HashTable,Упорядоченный,вставка,38.21459999016952 +HashTable,Упорядоченный,поиск,0.5354000022634864 +HashTable,Упорядоченный,удаление,0.5906000005779788 +HashTable,Упорядоченный,формирование списка,88.85620000364725 +HashTable,Случайный,вставка,32.90600000764243 +HashTable,Случайный,поиск,0.575300000491552 +HashTable,Случайный,удаление,0.5553999944822863 +HashTable,Случайный,формирование списка,88.85440000449307 +HashTable,Упорядоченный,вставка,34.381400007987395 +HashTable,Упорядоченный,поиск,0.5379000067478046 +HashTable,Упорядоченный,удаление,0.5721999914385378 +HashTable,Упорядоченный,формирование списка,99.7819000040181 +HashTable,Случайный,вставка,32.61900000507012 +HashTable,Случайный,поиск,0.5061999981990084 +HashTable,Случайный,удаление,0.5795999895781279 +HashTable,Случайный,формирование списка,99.24530000716913 +HashTable,Упорядоченный,вставка,33.648600001470186 +HashTable,Упорядоченный,поиск,0.5078999965917319 +HashTable,Упорядоченный,удаление,0.5576999974437058 +HashTable,Упорядоченный,формирование списка,95.2331000007689 +HashTable,Случайный,вставка,35.18770000664517 +HashTable,Случайный,поиск,0.5262999911792576 +HashTable,Случайный,удаление,0.5527000030269846 +HashTable,Случайный,формирование списка,94.51690000423696 +HashTable,Упорядоченный,вставка,32.084099992061965 +HashTable,Упорядоченный,поиск,0.5337000038707629 +HashTable,Упорядоченный,удаление,0.5661999894073233 +HashTable,Упорядоченный,формирование списка,92.34840000863187 +HashTable,Случайный,вставка,32.56010000768583 +HashTable,Случайный,поиск,0.8410000009462237 +HashTable,Случайный,удаление,0.9258000063709915 +HashTable,Случайный,формирование списка,100.2130999986548 +HashTable,Упорядоченный,вставка,35.40219999558758 +HashTable,Упорядоченный,поиск,0.5304999940562993 +HashTable,Упорядоченный,удаление,0.5839999939780682 +HashTable,Упорядоченный,формирование списка,89.48920000693761 +HashTable,Случайный,вставка,32.839099992997944 +HashTable,Случайный,поиск,0.5260000034468248 +HashTable,Случайный,удаление,0.5661000031977892 +HashTable,Случайный,формирование списка,94.66200000315439 +HashTable,Упорядоченный,вставка,33.16459999768995 +HashTable,Упорядоченный,поиск,0.5823999963467941 +HashTable,Упорядоченный,удаление,0.6093999982113019 +HashTable,Упорядоченный,формирование списка,96.02349999477156 +HashTable,Случайный,вставка,34.824300004402176 +HashTable,Случайный,поиск,0.6218999915290624 +HashTable,Случайный,удаление,0.6026000046404079 +HashTable,Случайный,формирование списка,116.66119999426883 +HashTable,Упорядоченный,вставка,37.25999999733176 +HashTable,Упорядоченный,поиск,0.5453000048873946 +HashTable,Упорядоченный,удаление,0.5864999984623864 +HashTable,Упорядоченный,формирование списка,89.71509999537375 +HashTable,Случайный,вставка,40.50240000651684 +HashTable,Случайный,поиск,0.8645000052638352 +HashTable,Случайный,удаление,0.90230000205338 +HashTable,Случайный,формирование списка,90.88490001158789 +HashTable,Упорядоченный,вставка,31.434000004082918 +HashTable,Упорядоченный,поиск,0.5355000030249357 +HashTable,Упорядоченный,удаление,0.6349000032059848 +HashTable,Упорядоченный,формирование списка,87.44309999747202 +HashTable,Случайный,вставка,33.64940000756178 +HashTable,Случайный,поиск,0.8600000001024455 +HashTable,Случайный,удаление,0.7679999980609864 +HashTable,Случайный,формирование списка,94.88509999937378 +HashTable,Упорядоченный,вставка,31.084599992027506 +HashTable,Упорядоченный,поиск,0.5097999965073541 +HashTable,Упорядоченный,удаление,0.5652999971061945 +HashTable,Упорядоченный,формирование списка,89.97830000589602 +HashTable,Случайный,вставка,34.94059998774901 +HashTable,Случайный,поиск,0.5363999953260645 +HashTable,Случайный,удаление,0.9123000054387376 +HashTable,Случайный,формирование списка,96.32379999675322 +HashTable,Упорядоченный,вставка,32.151399995200336 +HashTable,Упорядоченный,поиск,0.5317000031936914 +HashTable,Упорядоченный,удаление,0.5829000001540408 +HashTable,Упорядоченный,формирование списка,93.51580000657123 +BinarySearchTree,Случайный,вставка,102.40699999849312 +BinarySearchTree,Случайный,поиск,1.3612000038847327 +BinarySearchTree,Случайный,удаление,1.1245999921811745 +BinarySearchTree,Случайный,формирование списка,0.023999993572942913 +BinarySearchTree,Упорядоченный,вставка,316.0647000040626 +BinarySearchTree,Упорядоченный,поиск,3.1904000061331317 +BinarySearchTree,Упорядоченный,удаление,3.3792000031098723 +BinarySearchTree,Упорядоченный,формирование списка,1.6973000019788742 +BinarySearchTree,Случайный,вставка,91.03359999426175 +BinarySearchTree,Случайный,поиск,1.371799997286871 +BinarySearchTree,Случайный,удаление,1.2165999942226335 +BinarySearchTree,Случайный,формирование списка,0.024100008886307478 +BinarySearchTree,Упорядоченный,вставка,347.1241000079317 +BinarySearchTree,Упорядоченный,поиск,4.274999999324791 +BinarySearchTree,Упорядоченный,удаление,2.4944999895524234 +BinarySearchTree,Упорядоченный,формирование списка,0.8478999952785671 +BinarySearchTree,Случайный,вставка,92.06209999683779 +BinarySearchTree,Случайный,поиск,1.3248000032035634 +BinarySearchTree,Случайный,удаление,1.3013999996474013 +BinarySearchTree,Случайный,формирование списка,0.05079999391455203 +BinarySearchTree,Упорядоченный,вставка,332.4990999972215 +BinarySearchTree,Упорядоченный,поиск,3.3688999974401668 +BinarySearchTree,Упорядоченный,удаление,3.079799993429333 +BinarySearchTree,Упорядоченный,формирование списка,1.447100003133528 +BinarySearchTree,Случайный,вставка,94.18839999125339 +BinarySearchTree,Случайный,поиск,2.256499996292405 +BinarySearchTree,Случайный,удаление,1.2769000022672117 +BinarySearchTree,Случайный,формирование списка,0.12320000678300858 +BinarySearchTree,Упорядоченный,вставка,335.0482999958331 +BinarySearchTree,Упорядоченный,поиск,4.005399998277426 +BinarySearchTree,Упорядоченный,удаление,2.4089999933494255 +BinarySearchTree,Упорядоченный,формирование списка,1.9695999944815412 +BinarySearchTree,Случайный,вставка,101.12979999394156 +BinarySearchTree,Случайный,поиск,1.4136999961920083 +BinarySearchTree,Случайный,удаление,1.236700001754798 +BinarySearchTree,Случайный,формирование списка,0.27800000680144876 +BinarySearchTree,Упорядоченный,вставка,333.7679999967804 +BinarySearchTree,Упорядоченный,поиск,4.243799994583242 +BinarySearchTree,Упорядоченный,удаление,3.14470000739675 +BinarySearchTree,Упорядоченный,формирование списка,2.2033999994164333 +BinarySearchTree,Случайный,вставка,101.16009999183007 +BinarySearchTree,Случайный,поиск,2.0936999935656786 +BinarySearchTree,Случайный,удаление,2.1564000053331256 +BinarySearchTree,Случайный,формирование списка,0.4315999976824969 +BinarySearchTree,Упорядоченный,вставка,329.3697999906726 +BinarySearchTree,Упорядоченный,поиск,3.3687999966787174 +BinarySearchTree,Упорядоченный,удаление,2.4997000000439584 +BinarySearchTree,Упорядоченный,формирование списка,1.727099996060133 +BinarySearchTree,Случайный,вставка,99.00390000257175 +BinarySearchTree,Случайный,поиск,1.3448000099742785 +BinarySearchTree,Случайный,удаление,1.1521000124048442 +BinarySearchTree,Случайный,формирование списка,0.5104000010760501 +BinarySearchTree,Упорядоченный,вставка,332.7874999959022 +BinarySearchTree,Упорядоченный,поиск,4.331000003730878 +BinarySearchTree,Упорядоченный,удаление,2.853600002708845 +BinarySearchTree,Упорядоченный,формирование списка,3.774099997826852 +BinarySearchTree,Случайный,вставка,94.74190000037197 +BinarySearchTree,Случайный,поиск,1.352399995084852 +BinarySearchTree,Случайный,удаление,1.2611999991349876 +BinarySearchTree,Случайный,формирование списка,0.8051000040723011 +BinarySearchTree,Упорядоченный,вставка,338.8535999984015 +BinarySearchTree,Упорядоченный,поиск,3.4047999943140894 +BinarySearchTree,Упорядоченный,удаление,2.4553999974159524 +BinarySearchTree,Упорядоченный,формирование списка,3.5234999959357083 +BinarySearchTree,Случайный,вставка,91.76830000069458 +BinarySearchTree,Случайный,поиск,1.3421000039670616 +BinarySearchTree,Случайный,удаление,1.4171999937389046 +BinarySearchTree,Случайный,формирование списка,1.0964999964926392 +BinarySearchTree,Упорядоченный,вставка,332.47900000424124 +BinarySearchTree,Упорядоченный,поиск,3.157399987685494 +BinarySearchTree,Упорядоченный,удаление,6.078400008846074 +BinarySearchTree,Упорядоченный,формирование списка,4.061100000399165 +BinarySearchTree,Случайный,вставка,90.57990000292193 +BinarySearchTree,Случайный,поиск,1.302800010307692 +BinarySearchTree,Случайный,удаление,1.117399995564483 +BinarySearchTree,Случайный,формирование списка,1.220699996338226 +BinarySearchTree,Упорядоченный,вставка,326.30869999411516 +BinarySearchTree,Упорядоченный,поиск,3.144999995129183 +BinarySearchTree,Упорядоченный,удаление,2.4704999959794804 +BinarySearchTree,Упорядоченный,формирование списка,0.0027224000077694654 diff --git a/lukovnikovde/docs/data/time_schedule.png b/lukovnikovde/docs/data/time_schedule.png new file mode 100644 index 0000000..14a5895 Binary files /dev/null and b/lukovnikovde/docs/data/time_schedule.png differ