[1] Run experiments and save results to CSV

This commit is contained in:
SavelevMI 2026-05-21 13:42:11 +00:00
parent 09456b2a41
commit f57786fe3f

View File

@ -0,0 +1,73 @@
# Запуск экспериментального сравнения трёх структур данных
# Результаты сохраняются в experiment_results.csv
import csv
import sys
sys.setrecursionlimit(20000)
import linked_list as ll
import hash_table as ht
import bst
import data_utils
import benchmark
def main():
N = 10000 # количество записей
base_records = data_utils.generate_records(N)
shuffled, sorted_records = data_utils.prepare_datasets(base_records)
# Описания структур для бенчмарка
structures = {
'LinkedList': {
'name': 'LinkedList',
'create': lambda: None,
'insert': ll.ll_insert,
'find': ll.ll_find,
'delete': ll.ll_delete
},
'HashTable': {
'name': 'HashTable',
'create': lambda: ht.create_hash_table(10), # 10 корзин
'insert': ht.ht_insert,
'find': ht.ht_find,
'delete': ht.ht_delete
},
'BST': {
'name': 'BST',
'create': lambda: None,
'insert': bst.bst_insert,
'find': bst.bst_find,
'delete': bst.bst_delete
}
}
all_results = []
REPEATS = 5 # минимум 5 повторений
for name, struct in structures.items():
print(f"Testing {name} on random order...")
res_random = benchmark.measure_operations(struct, shuffled, 'random', REPEATS)
all_results.extend(res_random)
print(f"Testing {name} on sorted order...")
res_sorted = benchmark.measure_operations(struct, sorted_records, 'sorted', REPEATS)
all_results.extend(res_sorted)
# Сохранение CSV
with open('experiment_results.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['Structure', 'Mode', 'Repeat', 'Insert (sec)', 'Search (sec)', 'Delete (sec)'])
for row in all_results:
writer.writerow([
row['structure'],
row['mode'],
row['repetition'],
f"{row['insert_time']:.6f}",
f"{row['find_time']:.6f}",
f"{row['delete_time']:.6f}"
])
print("Experiment finished. Results saved to experiment_results.csv")
if __name__ == '__main__':
main()