добавлена хэш таблица

This commit is contained in:
soldatkinao 2026-05-17 23:20:06 +03:00
parent 0b78ffd2c8
commit 67a61da62b

View File

@ -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Готово (ну почти))).")