замеры для связного списка

This commit is contained in:
konnovaea 2026-04-26 17:52:13 +03:00
parent 274784ea0a
commit 1d224e6171

View File

@ -0,0 +1,94 @@
import random
import time
import csv
import os
from phonebook import *
def generate_test_data(n=10000):
records = [(f"User_{i:05d}", f"+7-999-{i:07d}") for i in range(n)]
records_shuffled = records.copy()
random.shuffle(records_shuffled)
records_sorted = sorted(records, key=lambda x: x[0])
return records_shuffled, records_sorted
def get_random_names(records, n=100):
return[name for name, _ in random.sample(records, min(n, len(records)))]
def run_linked_experiment(records, mode_name):
print(f"\n связный список ({mode_name}):")
print("вставка 10000 записей:")
insert_time = []
for run in range(5):
start = time.perf_counter()
head = None
for name, phone in records:
head = ll_insert(head, name, phone)
end = time.perf_counter()
insert_time.append(end - start)
print(f"Вставка {run+1}/5: {insert_time[-1]:.6f} сек")
avg_insert = sum(insert_time) / 5
print(f"среднее: {avg_insert:.6f} сек")
print("поиск 110 записей:")
exist_names = get_random_names(records, 100)
non_exist_names = [f"None_{i}" for i in range(10)]
find_times = []
for run in range(5):
start = time.perf_counter()
for name in exist_names:
ll_find(head, name)
for name in non_exist_names:
ll_find(head, name)
end = time.pref_cointer()
find_times.append(end - start)
print(f"поиск {run+1}/5: {find_times[-1]:.6f} сек")
avg_find = sum(find_times) / 5
print(f"среднее: {avg_find:.6f} сек")
print("удаление 50 случайных записей:")
to_delete = get_random_names(records,50)
delete_times = []
for run in range(5):
current_head = head
start = time.perf_counter()
for name in to_delete:
current_head = ll_delete(current_head, name)
end = time.perf_counter()
delete_times.append(end - start)
print(f"удаление {run+1}/5: {delete_times[-1]:.6f} сек")
avg_delete = sum(delete_times) / 5
print(f"среднее: {avg_delete:.6f} сек")
return{
'structure': 'LinkedList',
'mode': mode_name,
'insert_avg': avg_insert,
'insert_all': insert_time,
'find_avg': avg_find,
'find_all': find_times,
'delete_avg': avg_delete,
'delete_all': delete_times
}