задание 1: экспериментальная часть, тесты
This commit is contained in:
parent
dd054c4034
commit
098e0f3a32
91
results.csv
Normal file
91
results.csv
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
структура,режим,операция,повторение,время (сек)
|
||||
LinkedList,случайный,вставка,1,0.128959799999393
|
||||
LinkedList,случайный,поиск,1,0.006587400000171328
|
||||
LinkedList,случайный,удаление,1,0.0037955999996484024
|
||||
LinkedList,случайный,вставка,2,0.1274652000001879
|
||||
LinkedList,случайный,поиск,2,0.006692099999781931
|
||||
LinkedList,случайный,удаление,2,0.0038293999996312778
|
||||
LinkedList,случайный,вставка,3,0.13063139999940176
|
||||
LinkedList,случайный,поиск,3,0.006624399999964226
|
||||
LinkedList,случайный,удаление,3,0.004125400000702939
|
||||
LinkedList,случайный,вставка,4,0.13235040000017761
|
||||
LinkedList,случайный,поиск,4,0.007224200000564451
|
||||
LinkedList,случайный,удаление,4,0.0038412000003518187
|
||||
LinkedList,случайный,вставка,5,0.1376228999997693
|
||||
LinkedList,случайный,поиск,5,0.007752999999866006
|
||||
LinkedList,случайный,удаление,5,0.004621699999916018
|
||||
LinkedList,отсортированный,вставка,1,0.14293330000054993
|
||||
LinkedList,отсортированный,поиск,1,0.006024299999808136
|
||||
LinkedList,отсортированный,удаление,1,0.004954899999574991
|
||||
LinkedList,отсортированный,вставка,2,0.1474125999993703
|
||||
LinkedList,отсортированный,поиск,2,0.00762140000006184
|
||||
LinkedList,отсортированный,удаление,2,0.0051066999994873186
|
||||
LinkedList,отсортированный,вставка,3,0.13767009999992297
|
||||
LinkedList,отсортированный,поиск,3,0.0064199999997072155
|
||||
LinkedList,отсортированный,удаление,3,0.005227899999226793
|
||||
LinkedList,отсортированный,вставка,4,0.13925280000057683
|
||||
LinkedList,отсортированный,поиск,4,0.006386400000337744
|
||||
LinkedList,отсортированный,удаление,4,0.0049518000005264184
|
||||
LinkedList,отсортированный,вставка,5,0.13541350000014063
|
||||
LinkedList,отсортированный,поиск,5,0.006607199999962177
|
||||
LinkedList,отсортированный,удаление,5,0.005551099999138387
|
||||
HashTable,случайный,вставка,1,0.00123639999947045
|
||||
HashTable,случайный,поиск,1,3.639999977167463e-05
|
||||
HashTable,случайный,удаление,1,1.9799999790848233e-05
|
||||
HashTable,случайный,вставка,2,0.000970699999925273
|
||||
HashTable,случайный,поиск,2,3.259999994043028e-05
|
||||
HashTable,случайный,удаление,2,1.7100000150094274e-05
|
||||
HashTable,случайный,вставка,3,0.0009898999996948987
|
||||
HashTable,случайный,поиск,3,3.20999997711624e-05
|
||||
HashTable,случайный,удаление,3,1.7100000150094274e-05
|
||||
HashTable,случайный,вставка,4,0.001140299999860872
|
||||
HashTable,случайный,поиск,4,0.00010819999988598283
|
||||
HashTable,случайный,удаление,4,4.2800000301213004e-05
|
||||
HashTable,случайный,вставка,5,0.001704299999801151
|
||||
HashTable,случайный,поиск,5,3.510000078676967e-05
|
||||
HashTable,случайный,удаление,5,1.83000001925393e-05
|
||||
HashTable,отсортированный,вставка,1,0.0009811999998419196
|
||||
HashTable,отсортированный,поиск,1,3.110000034212135e-05
|
||||
HashTable,отсортированный,удаление,1,1.9400000383029692e-05
|
||||
HashTable,отсортированный,вставка,2,0.0009785000002011657
|
||||
HashTable,отсортированный,поиск,2,3.1599999601894524e-05
|
||||
HashTable,отсортированный,удаление,2,1.9800000700342935e-05
|
||||
HashTable,отсортированный,вставка,3,0.0009659999996074475
|
||||
HashTable,отсортированный,поиск,3,3.0500000320898835e-05
|
||||
HashTable,отсортированный,удаление,3,1.9299999621580355e-05
|
||||
HashTable,отсортированный,вставка,4,0.0009494000005361158
|
||||
HashTable,отсортированный,поиск,4,2.989999939018162e-05
|
||||
HashTable,отсортированный,удаление,4,1.8900000213761814e-05
|
||||
HashTable,отсортированный,вставка,5,0.0012150000002293382
|
||||
HashTable,отсортированный,поиск,5,3.480000032141106e-05
|
||||
HashTable,отсортированный,удаление,5,2.0899999981338624e-05
|
||||
BST,случайный,вставка,1,0.004831499999454536
|
||||
BST,случайный,поиск,1,0.00013619999936054228
|
||||
BST,случайный,удаление,1,9.070000032807002e-05
|
||||
BST,случайный,вставка,2,0.005335699999704957
|
||||
BST,случайный,поиск,2,0.00012989999959245324
|
||||
BST,случайный,удаление,2,8.600000001024455e-05
|
||||
BST,случайный,вставка,3,0.005207599999266677
|
||||
BST,случайный,поиск,3,0.00013050000052317046
|
||||
BST,случайный,удаление,3,8.580000030633528e-05
|
||||
BST,случайный,вставка,4,0.005297200000313751
|
||||
BST,случайный,поиск,4,0.00013440000020636944
|
||||
BST,случайный,удаление,4,8.789999992586672e-05
|
||||
BST,случайный,вставка,5,0.005037799999627168
|
||||
BST,случайный,поиск,5,0.000649399999929301
|
||||
BST,случайный,удаление,5,0.0001084000004993868
|
||||
BST,отсортированный,вставка,1,0.8110883999997895
|
||||
BST,отсортированный,поиск,1,0.019361399999979767
|
||||
BST,отсортированный,удаление,1,0.014678200000162178
|
||||
BST,отсортированный,вставка,2,0.7911546999994243
|
||||
BST,отсортированный,поиск,2,0.019212399999560148
|
||||
BST,отсортированный,удаление,2,0.013222700000369514
|
||||
BST,отсортированный,вставка,3,0.7786938999997801
|
||||
BST,отсортированный,поиск,3,0.01864480000040203
|
||||
BST,отсортированный,удаление,3,0.013478699999723176
|
||||
BST,отсортированный,вставка,4,0.7826362000005247
|
||||
BST,отсортированный,поиск,4,0.01973920000000362
|
||||
BST,отсортированный,удаление,4,0.013336900000467722
|
||||
BST,отсортированный,вставка,5,0.7718632000005528
|
||||
BST,отсортированный,поиск,5,0.02021930000046268
|
||||
BST,отсортированный,удаление,5,0.013186899999709567
|
||||
|
124
sorokinfi/427.md
124
sorokinfi/427.md
|
|
@ -154,4 +154,126 @@ def bst_list_all(root):
|
|||
records.append((node['name'], node['phone']))
|
||||
_inorder(node['right'])
|
||||
_inorder(root)
|
||||
return records
|
||||
return records
|
||||
|
||||
|
||||
# ЭКСПЕРИМЕНТАЛЬНАЯ ЧАСТЬ
|
||||
|
||||
def run_experiments():
|
||||
N = 3000
|
||||
HASH_SIZE = 1007
|
||||
|
||||
print(f"генерация тестовых данных для N = {N}...")
|
||||
records_sorted = [(f"User_{i:05d}", f"+7999123{i:04d}") for i in range(N)]
|
||||
records_shuffled = records_sorted.copy()
|
||||
random.seed(42)
|
||||
random.shuffle(records_shuffled)
|
||||
|
||||
# подготовка выборок
|
||||
existing_sample = [r[0] for r in random.sample(records_sorted, min(100, N))]
|
||||
non_existing_sample = [f"None_{i}" for i in range(10)]
|
||||
search_names = existing_sample + non_existing_sample
|
||||
|
||||
delete_names = [r[0] for r in random.sample(records_sorted, min(50, N))]
|
||||
csv_rows = [["структура", "режим", "операция", "повторение", "время (сек)"]]
|
||||
modes = [("случайный", records_shuffled), ("отсортированный", records_sorted)]
|
||||
|
||||
print("запуск экспериментов (5 повторений для каждого режима)")
|
||||
|
||||
# ТЕСТ: СВЯЗНЫЙ СПИСОК
|
||||
|
||||
for mode_name, data in modes:
|
||||
for rep in range(1, 6):
|
||||
head = None
|
||||
t_start = time.perf_counter()
|
||||
for name, phone in data:
|
||||
head = ll_insert(head, name, phone)
|
||||
t_end = time.perf_counter()
|
||||
csv_rows.append(["LinkedList", mode_name, "вставка", rep, t_end - t_start])
|
||||
|
||||
t_start = time.perf_counter()
|
||||
for name in search_names:
|
||||
ll_find(head, name)
|
||||
t_end = time.perf_counter()
|
||||
csv_rows.append(["LinkedList", mode_name, "поиск", rep, t_end - t_start])
|
||||
|
||||
t_start = time.perf_counter()
|
||||
for name in delete_names:
|
||||
head = ll_delete(head, name)
|
||||
t_end = time.perf_counter()
|
||||
csv_rows.append(["LinkedList", mode_name, "удаление", rep, t_end - t_start])
|
||||
|
||||
# ТЕСТ: ХЕШ-ТАБЛИЦА
|
||||
|
||||
for mode_name, data in modes:
|
||||
for rep in range(1, 6):
|
||||
buckets = [None] * HASH_SIZE
|
||||
t_start = time.perf_counter()
|
||||
for name, phone in data:
|
||||
ht_insert(buckets, name, phone)
|
||||
t_end = time.perf_counter()
|
||||
csv_rows.append(["HashTable", mode_name, "вставка", rep, t_end - t_start])
|
||||
|
||||
t_start = time.perf_counter()
|
||||
for name in search_names:
|
||||
ht_find(buckets, name)
|
||||
t_end = time.perf_counter()
|
||||
csv_rows.append(["HashTable", mode_name, "поиск", rep, t_end - t_start])
|
||||
|
||||
t_start = time.perf_counter()
|
||||
for name in delete_names:
|
||||
ht_delete(buckets, name)
|
||||
t_end = time.perf_counter()
|
||||
csv_rows.append(["HashTable", mode_name, "удаление", rep, t_end - t_start])
|
||||
|
||||
# ТЕСТ: ДЕРЕВО ПОИСКА (BST)
|
||||
|
||||
for mode_name, data in modes:
|
||||
for rep in range(1, 6):
|
||||
root = None
|
||||
t_start = time.perf_counter()
|
||||
for name, phone in data:
|
||||
root = bst_insert(root, name, phone)
|
||||
t_end = time.perf_counter()
|
||||
csv_rows.append(["BST", mode_name, "вставка", rep, t_end - t_start])
|
||||
|
||||
t_start = time.perf_counter()
|
||||
for name in search_names:
|
||||
bst_find(root, name)
|
||||
t_end = time.perf_counter()
|
||||
csv_rows.append(["BST", mode_name, "поиск", rep, t_end - t_start])
|
||||
|
||||
t_start = time.perf_counter()
|
||||
for name in delete_names:
|
||||
root = bst_delete(root, name)
|
||||
t_end = time.perf_counter()
|
||||
csv_rows.append(["BST", mode_name, "удаление", rep, t_end - t_start])
|
||||
|
||||
# сохранение в csv
|
||||
with open("results.csv", "w", newline="", encoding="utf-8") as f:
|
||||
writer = csv.writer(f)
|
||||
writer.writerows(csv_rows)
|
||||
print("\nвсе замеры сохранены в файл 'results.csv'.")
|
||||
|
||||
show_summary(csv_rows)
|
||||
|
||||
# функция для подсчета и вывода среднего времени
|
||||
def show_summary(rows):
|
||||
summary = defaultdict(list)
|
||||
for row in rows[1:]:
|
||||
struct, mode, op, rep, elapsed = row
|
||||
summary[(struct, mode, op)].append(elapsed)
|
||||
|
||||
print("\nСВОДНЫЕ РЕЗУЛЬТАТЫ (СРЕДНЕЕ ВРЕМЯ ИЗ 5 ЗАПУСКОВ)")
|
||||
print(f"{'структура':<12} | {'режим данных':<15} | {'операция':<10} | {'время (сек)':<12}")
|
||||
print("-" * 59)
|
||||
for (struct, mode, op), times in sorted(summary.items()):
|
||||
avg_time = sum(times) / len(times)
|
||||
print(f"{struct:<12} | {mode:<15} | {op:<10} | {avg_time:.6f}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
run_experiments()
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user