[1] 1-е задание #378

Merged
git_admin merged 10 commits from meosyam/2026-rff_mp:1 into develop 2026-09-05 06:40:05 +00:00
Showing only changes of commit 6adf9d0516 - Show all commits

View File

@ -1,3 +1,9 @@
import random
import time
import csv
import sys
sys.setrecursionlimit(20000)
def ll_insert(head, name, phone):
cur = head
while cur:
@ -46,7 +52,7 @@ def ll_list_all(head):
res.sort(key=lambda x: x[0])
return res
SIZE = 5
SIZE = 10
def hash_func(name):
s = 0
@ -144,9 +150,6 @@ def bst_list_all(root):
inorder(root)
return res
import random, time, csv, sys
sys.setrecursionlimit(20000)
def generate_records(n, seed=42):
random.seed(seed)
rec = []
@ -162,7 +165,7 @@ def prepare_datasets(base):
sorted_rec = sorted(base, key=lambda x: x[0])
return shuffled, sorted_rec
def run_experiment(funcs, records, mode, repeats=3):
def run_experiment(funcs, records, mode, repeats=5):
results = []
for rep in range(repeats):
struct = funcs['create']()
@ -170,39 +173,42 @@ def run_experiment(funcs, records, mode, repeats=3):
for name, phone in records:
struct = funcs['insert'](struct, name, phone)
t1 = time.perf_counter()
ins = t1 - t0
insert_time = t1 - t0
existing = [n for n, _ in records]
sample = random.sample(existing, 100)
non_ex = [f"None_{i}" for i in range(10)]
to_search = sample + non_ex
random.shuffle(to_search)
sample_existing = random.sample(existing, 100)
non_existing = [f"None_{i}" for i in range(10)]
search_names = sample_existing + non_existing
random.shuffle(search_names)
t0 = time.perf_counter()
for name in to_search:
for name in search_names:
_ = funcs['find'](struct, name)
t1 = time.perf_counter()
find_t = t1 - t0
to_del = random.sample(existing, 10)
search_time = t1 - t0
to_delete = random.sample(existing, 50)
t0 = time.perf_counter()
for name in to_del:
for name in to_delete:
struct = funcs['delete'](struct, name)
t1 = time.perf_counter()
del_t = t1 - t0
delete_time = t1 - t0
results.append({
'structure': funcs['name'],
'mode': mode,
'rep': rep+1,
'insert': ins,
'search': find_t,
'delete': del_t
'repetition': rep+1,
'insert': insert_time,
'search': search_time,
'delete': delete_time
})
return results
def main():
N = 1000
base = generate_records(N)
shuffled, sorted_rec = prepare_datasets(base)
base_records = generate_records(N)
shuffled, sorted_records = prepare_datasets(base_records)
structs = {
structures = {
'LinkedList': {
'name': 'LinkedList',
'create': lambda: None,
@ -229,20 +235,27 @@ def main():
}
}
all_res = []
for name, funcs in structs.items():
print(f"Testing {name} random...")
all_res += run_experiment(funcs, shuffled, 'random')
print(f"Testing {name} sorted...")
all_res += run_experiment(funcs, sorted_rec, 'sorted')
all_results = []
for name, funcs in structures.items():
print(f"Testing {name} on random order...")
all_results.extend(run_experiment(funcs, shuffled, 'random'))
print(f"Testing {name} on sorted order...")
all_results.extend(run_experiment(funcs, sorted_records, 'sorted'))
with open('results.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['Structure','Mode','Repeat','Insert','Search','Delete'])
for r in all_res:
writer.writerow([r['structure'], r['mode'], r['rep'],
f"{r['insert']:.6f}", f"{r['search']:.6f}", f"{r['delete']:.6f}"])
print("Done. Results in results.csv")
writer.writerow(['Structure', 'Mode', 'Repetition', 'Insert (sec)', 'Search (sec)', 'Delete (sec)'])
for r in all_results:
writer.writerow([
r['structure'],
r['mode'],
r['repetition'],
f"{r['insert']:.6f}",
f"{r['search']:.6f}",
f"{r['delete']:.6f}"
])
print("Experiment finished. Results saved to esults.csv")
if __name__ == '__main__':
main()