diff --git a/VolkovVA/cod.py b/VolkovVA/cod.py index 63853b8..8383cb1 100644 --- a/VolkovVA/cod.py +++ b/VolkovVA/cod.py @@ -1,5 +1,6 @@ import random as rnd - +import time +import csv # СВЯЗНЫЙ СПИСОК @@ -210,21 +211,148 @@ def bst_list_all(root): if __name__ == '__main__': N = 10000 - + records = [] for i in range(N): - name = f"User_{i:05d}" phone = f"+7-{rnd.randint(100, 999)}-{rnd.randint(100, 999)}-{rnd.randint(1000, 9999)}" records.append((name, phone)) - - records_shuffled = records[:] - rnd.shuffle(records_shuffled) - + records_shuffled = records[:] + rnd.shuffle(records_shuffled) records_sorted = sorted(records, key=lambda x: x[0]) - print(f" Бетта-тест") - print(f"records_shuffled (первые 3): {records_shuffled[:3]}") - print(f"records_sorted (первые 3): {records_sorted[:3]}") \ No newline at end of file + + s_names = [] + for i in range(100): + s_names.append(records_shuffled[i][0]) + for i in range(10): + s_names.append(f"None_{i}") + + d_names = [] + sampled = rnd.sample(records_shuffled, 50) + for item in sampled: + d_names.append(item[0]) + + print("Начало замеров...") + + results = [["Структура", "Режим", "Операция", "Время (сек)"]] + + + # ПРОВЕДЕНИЕ ЗАМЕРОВ + + # СВЯЗНЫЙ СПИСОК + for mode_name, data in [("случайный", records_shuffled), ("отсортированный", records_sorted)]: + s_ins = 0 + s_fnd=0 + s_del=0 + for _ in range(5): + ll = None + + + t1 = time.perf_counter() + for name, phone in data: + ll = ll_insert(ll, name, phone) + time_ins = time.perf_counter() - t1 + s_ins += time_ins + results.append(["LinkedList", mode_name, "вставка", time_ins]) + + + t1 = time.perf_counter() + for name in s_names: + ll_find(ll, name) + time_fnd = time.perf_counter() - t1 + s_fnd += time_fnd + results.append(["LinkedList", mode_name, "поиск", time_fnd]) + + + t1 = time.perf_counter() + for name in d_names: + ll = ll_delete(ll, name) + time_del = time.perf_counter() - t1 + s_del += time_del + results.append(["LinkedList", mode_name, "удаление", time_del]) + + print(f"LinkedList ({mode_name}) - Вставка: {s_ins/5:.5f} сек.") + print(f"LinkedList ({mode_name}) - Поиск: {s_fnd/5:.5f} сек.") + print(f"LinkedList ({mode_name}) - Удаление: {s_del/5:.5f} сек.") + + + # ХЕШ-ТАБЛИЦА + for mode_name, data in [("случайный", records_shuffled), ("отсортированный", records_sorted)]: + s_ins = 0 + s_fnd=0 + s_del =0 + for _ in range(5): + ht = [None] * 2000 + + + t1 = time.perf_counter() + for name, phone in data: + ht = ht_insert(ht, name, phone) + time_ins = time.perf_counter() - t1 + s_ins += time_ins + results.append(["HashTable", mode_name, "вставка", time_ins]) + + + t1 = time.perf_counter() + for name in s_names: + ht_find(ht, name) + time_fnd = time.perf_counter() - t1 + s_fnd += time_fnd + results.append(["HashTable", mode_name, "поиск", time_fnd]) + + + t1 = time.perf_counter() + for name in d_names: + ht = ht_delete(ht, name) + time_del = time.perf_counter() - t1 + s_del += time_del + results.append(["HashTable", mode_name, "удаление", time_del]) + + print(f"HashTable ({mode_name}) - Вставка: {s_ins/5:.5f} сек.") + print(f"HashTable ({mode_name}) - Поиск: {s_fnd/5:.5f} сек.") + print(f"HashTable ({mode_name}) - Удаление: {s_del/5:.5f} сек.") + + + # ДЕРЕВО + + for mode_name, data in [("случайный", records_shuffled), ("отсортированный", records_sorted)]: + s_ins = 0 + s_fnd = 0 + s_del = 0 + for _ in range(5): + bst = None + + + t1 = time.perf_counter() + for name, phone in data: + bst = bst_insert(bst, name, phone) + time_ins = time.perf_counter() - t1 + s_ins += time_ins + results.append(["BST", mode_name, "вставка", time_ins]) + + + t1 = time.perf_counter() + for name in s_names: + bst_find(bst, name) + time_fnd = time.perf_counter() - t1 + s_fnd += time_fnd + results.append(["BST", mode_name, "поиск", time_fnd]) + + + t1 = time.perf_counter() + for name in d_names: + bst = bst_delete(bst, name) + time_del = time.perf_counter() - t1 + s_del += time_del + results.append(["BST", mode_name, "удаление", time_del]) + + print(f"BST ({mode_name}) - Вставка: {s_ins/5:.5f} сек.") + print(f"BST ({mode_name}) - Поиск: {s_fnd/5:.5f} сек.") + print(f"BST ({mode_name}) - Удаление: {s_del/5:.5f} сек.") + + with open("docs/data/results.csv", "w", newline="", encoding="utf-8") as f: + writer = csv.writer(f) + writer.writerows(results) \ No newline at end of file