2026-rff_mp/BrychkinKA/docs/source/benchmark.py
2026-05-25 14:37:27 +03:00

65 lines
1.8 KiB
Python

# benchmark.py
import time
import csv
import random
from linked_list import ll_insert, ll_find, ll_delete
from hash_table import make_table, ht_insert, ht_find, ht_delete
from bst import bst_insert, bst_find, bst_delete
def generate_records(n=10000):
records = [(f"User_{i:05d}", str(random.randint(100000, 999999))) for i in range(n)]
records_shuffled = records[:]
random.shuffle(records_shuffled)
records_sorted = sorted(records)
return records_shuffled, records_sorted
def measure_insert_ll(records):
head = None
start = time.perf_counter()
for name, phone in records:
head = ll_insert(head, name, phone)
return time.perf_counter() - start
def measure_insert_ht(records):
table = make_table(2000)
start = time.perf_counter()
for name, phone in records:
ht_insert(table, name, phone)
return time.perf_counter() - start
def measure_insert_bst(records):
root = None
start = time.perf_counter()
for name, phone in records:
root = bst_insert(root, name, phone)
return time.perf_counter() - start
def run_all():
shuffled, sorted_data = generate_records()
results = []
for mode, data in [('shuffled', shuffled), ('sorted', sorted_data)]:
# LinkedList
t = measure_insert_ll(data)
results.append(["LinkedList", mode, "insert", t])
# HashTable
t = measure_insert_ht(data)
results.append(["HashTable", mode, "insert", t])
# BST
t = measure_insert_bst(data)
results.append(["BST", mode, "insert", t])
with open("results.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(["Structure", "Mode", "Operation", "Time"])
writer.writerows(results)
print("Результаты сохранены в results.csv")
if __name__ == "__main__":
run_all()