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])
|
rec.sort(key=lambda x: x[0])
|
||||||
return rec
|
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):
|
def gen_data(N=10000):
|
||||||
data = []
|
data = []
|
||||||
for i in range(N):
|
for i in range(N):
|
||||||
|
|
@ -118,6 +143,12 @@ if __name__ == '__main__':
|
||||||
for r in rows:
|
for r in rows:
|
||||||
all_rows.append(['LinkedList'] + r)
|
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
|
# Запись в CSV
|
||||||
with open('results.csv', 'w', newline='', encoding='utf-8') as f:
|
with open('results.csv', 'w', newline='', encoding='utf-8') as f:
|
||||||
writer = csv.writer(f)
|
writer = csv.writer(f)
|
||||||
|
|
@ -133,7 +164,7 @@ if __name__ == '__main__':
|
||||||
avg[(struct, order, op)].append(t)
|
avg[(struct, order, op)].append(t)
|
||||||
print("\nСредние значения (5 запусков):")
|
print("\nСредние значения (5 запусков):")
|
||||||
print(f"{'Структура':<12} {'Порядок':<10} {'Вставка':>10} {'Поиск':>10} {'Удаление':>10} {'ListAll':>10}")
|
print(f"{'Структура':<12} {'Порядок':<10} {'Вставка':>10} {'Поиск':>10} {'Удаление':>10} {'ListAll':>10}")
|
||||||
for struct in ['LinkedList']:
|
for struct in ['LinkedList', 'HashTable']:
|
||||||
for order in ['shuffled', 'sorted']:
|
for order in ['shuffled', 'sorted']:
|
||||||
row = [struct, order]
|
row = [struct, order]
|
||||||
for op in ['insert', 'find', 'delete', 'list_all']:
|
for op in ['insert', 'find', 'delete', 'list_all']:
|
||||||
|
|
@ -141,4 +172,4 @@ if __name__ == '__main__':
|
||||||
avg_val = sum(vals)/len(vals)
|
avg_val = sum(vals)/len(vals)
|
||||||
row.append(f"{avg_val:.5f}")
|
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(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