[1] 1-st-exercise #2

Open
volkovva wants to merge 15 commits from 1-st-exercise into develop
Showing only changes of commit 8963a00e6e - Show all commits

View File

@ -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]}")
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)