forked from UNN/2026-rff_mp
добавлена хэш таблица
This commit is contained in:
parent
0b78ffd2c8
commit
67a61da62b
|
|
@ -51,6 +51,31 @@ def ll_list_all(head):
|
|||
rec.sort(key=lambda x: x[0])
|
||||
return rec
|
||||
|
||||
# 2. Хеш-таблица
|
||||
def ht_insert(buckets, name, phone):
|
||||
idx = hash(name) % len(buckets)
|
||||
buckets[idx] = ll_insert(buckets[idx], name, phone)
|
||||
return buckets
|
||||
|
||||
def ht_find(buckets, name):
|
||||
idx = hash(name) % len(buckets)
|
||||
return ll_find(buckets[idx], name)
|
||||
|
||||
def ht_delete(buckets, name):
|
||||
idx = hash(name) % len(buckets)
|
||||
buckets[idx] = ll_delete(buckets[idx], name)
|
||||
return buckets
|
||||
|
||||
def ht_list_all(buckets):
|
||||
rec = []
|
||||
for b in buckets:
|
||||
cur = b
|
||||
while cur:
|
||||
rec.append((cur['name'], cur['phone']))
|
||||
cur = cur['next']
|
||||
rec.sort(key=lambda x: x[0])
|
||||
return rec
|
||||
|
||||
def gen_data(N=10000):
|
||||
data = []
|
||||
for i in range(N):
|
||||
|
|
@ -118,6 +143,12 @@ if __name__ == '__main__':
|
|||
for r in rows:
|
||||
all_rows.append(['LinkedList'] + r)
|
||||
|
||||
print("Хеш-таблица...")
|
||||
rows = run_test(lambda: [None]*2000, ht_insert, ht_find, ht_delete, ht_list_all,
|
||||
shuffled, sorted_data, exist_names, missing_names, del_names)
|
||||
for r in rows:
|
||||
all_rows.append(['HashTable'] + r)
|
||||
|
||||
# Запись в CSV
|
||||
with open('results.csv', 'w', newline='', encoding='utf-8') as f:
|
||||
writer = csv.writer(f)
|
||||
|
|
@ -133,7 +164,7 @@ if __name__ == '__main__':
|
|||
avg[(struct, order, op)].append(t)
|
||||
print("\nСредние значения (5 запусков):")
|
||||
print(f"{'Структура':<12} {'Порядок':<10} {'Вставка':>10} {'Поиск':>10} {'Удаление':>10} {'ListAll':>10}")
|
||||
for struct in ['LinkedList']:
|
||||
for struct in ['LinkedList', 'HashTable']:
|
||||
for order in ['shuffled', 'sorted']:
|
||||
row = [struct, order]
|
||||
for op in ['insert', 'find', 'delete', 'list_all']:
|
||||
|
|
@ -141,4 +172,4 @@ if __name__ == '__main__':
|
|||
avg_val = sum(vals)/len(vals)
|
||||
row.append(f"{avg_val:.5f}")
|
||||
print(f"{row[0]:<12} {row[1]:<10} {row[2]:>10} {row[3]:>10} {row[4]:>10} {row[5]:>10}")
|
||||
print("\nГотово (только связный список).")
|
||||
print("\nГотово (ну почти))).")
|
||||
Loading…
Reference in New Issue
Block a user