[1] add correctly results
This commit is contained in:
parent
f25d39d59e
commit
6adf9d0516
|
|
@ -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()
|
||||
Loading…
Reference in New Issue
Block a user