forked from UNN/2026-rff_mp
Реализован HashTable
This commit is contained in:
parent
0b092e8d26
commit
9bdefcc922
|
|
@ -5,14 +5,54 @@
|
||||||
каждый элемент — голова связного списка (или None).
|
каждый элемент — голова связного списка (или None).
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def ht_insert(buckets, name, phone):
|
from task1.structures.LinkedList import *
|
||||||
"""вычисляет индекс, вызывает ll_insert для соответствующего бакета."""
|
|
||||||
|
|
||||||
def ht_find(buckets, name):
|
def hash_fun(name: str, size: int) -> int:
|
||||||
...
|
"""Принимает имя и возвращает индекс бакета для него."""
|
||||||
|
if size <= 0:
|
||||||
|
raise ValueError("size должен быть больше 0")
|
||||||
|
|
||||||
def ht_delete(buckets, name):
|
hashSum = 0
|
||||||
...
|
n = size+1
|
||||||
|
base = 1103 # ord('я')
|
||||||
|
for letter in name:
|
||||||
|
hashSum += ord(letter) * pow(base, n)
|
||||||
|
n -= 1
|
||||||
|
return int(hashSum) % size
|
||||||
|
|
||||||
|
def ht_insert(buckets: list, name: str, phone: str) -> list:
|
||||||
|
"""Возвращает новый массив бакетов
|
||||||
|
Вычисляет индекс, вызывает ll_insert для соответствующего бакета.
|
||||||
|
Функция не меняет размер массива бакетов автоматически!"""
|
||||||
|
if buckets == []:
|
||||||
|
raise ValueError("Длинна buckets должна быть больше 0")
|
||||||
|
|
||||||
|
size = len(buckets)
|
||||||
|
index = hash_fun(name, size)
|
||||||
|
buckets[index] = ll_insert(buckets[index], name, phone)
|
||||||
|
return buckets
|
||||||
|
|
||||||
|
def ht_delete(buckets: list, name: str) -> list:
|
||||||
|
"""Возвращает новый массив бакетов без элемента с именем name"""
|
||||||
|
if buckets == []:
|
||||||
|
raise ValueError("Длинна buckets должна быть больше 0")
|
||||||
|
|
||||||
|
size = len(buckets)
|
||||||
|
index = hash_fun(name, size)
|
||||||
|
buckets[index] = ll_delete(buckets[index], name)
|
||||||
|
return buckets
|
||||||
|
|
||||||
|
def ht_find(buckets: list, name: str) -> str:
|
||||||
|
if buckets == []:
|
||||||
|
raise ValueError("Длинна buckets должна быть больше 0")
|
||||||
|
|
||||||
|
size = len(buckets)
|
||||||
|
index = hash_fun(name, size)
|
||||||
|
return ll_find(buckets[index], name)
|
||||||
|
|
||||||
def ht_list_all(buckets):
|
def ht_list_all(buckets):
|
||||||
"""Собирает все записи из всех бакетов и сортирует"""
|
"""Собирает все записи из всех бакетов и сортирует"""
|
||||||
|
allRecords = []
|
||||||
|
for bucket in buckets:
|
||||||
|
allRecords.extend(ll_list_all(bucket))
|
||||||
|
return sorted(allRecords, key=lambda x: x[0])
|
||||||
Loading…
Reference in New Issue
Block a user