[1] 1-st-exersize #245
73
SavelevMI/docs/data/1-st-exersize/main.py
Normal file
73
SavelevMI/docs/data/1-st-exersize/main.py
Normal 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()
|
||||
Loading…
Reference in New Issue
Block a user