Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def hash1(s: str, table_size):
- h = 0
- for c in s:
- h += (h * 5171 + ord(c)) % table_size
- h = (h * 2 - 1) % table_size
- return h
- def hash2(s: str, table_size):
- h = 0
- for c in s:
- h += (h * 5179 + ord(c)) % table_size
- h = (h * 2 - 1) % table_size
- return h
- class Node:
- def __init__(self, key=0, value=0):
- self.key = key
- self.value = value
- self.enabled = True
- class HashTable:
- def __init__(self, size=8):
- print("Происходит инициализация хеш таблицы.")
- self.table_size = size
- self.slots: list[Node] = [None] * self.table_size # что это значит
- self.size = 0
- self.koef = 2 / 3
- def change_size(self):
- print("Значение размера таблицы до: ", self.table_size)
- self.table_size *= 2
- self.size = 0
- old_table = self.slots
- self.slots: list[Node] = [None] * self.table_size
- for el in old_table:
- if el is not None and el.enabled:
- self.insert(el.key, el.value)
- print(f"Значение размера таблицы после: {self.table_size}\n")
- return self.table_size
- def insert(self, key, value):
- if self.size / self.table_size >= self.koef:
- self.change_size()
- h1 = hash1(key, self.table_size)
- h2 = hash2(key, self.table_size)
- node = self.slots[h1]
- while True:
- if node is None or not node.enabled:
- self.slots[h1] = Node(key, value)
- self.size += 1
- return
- elif node.key == key:
- self.slots[h1] = Node(key, value)
- return
- h1 += h2
- h1 %= self.table_size
- node = self.slots[h1]
- def search(self, key):
- h1 = hash1(key, self.table_size)
- h2 = hash2(key, self.table_size)
- node = self.slots[h1]
- while True:
- if node is None:
- return False
- elif node.enabled and node.key == key:
- return True
- h1 += h2
- h1 %= self.table_size
- node = self.slots[h1]
- def remove(self, key):
- h1 = hash1(key, self.table_size)
- h2 = hash2(key, self.table_size)
- node = self.slots[h1]
- while True:
- if node is None:
- return False
- elif node.enabled and node.key == key:
- node.enabled = False
- self.size -= 1
- return True
- h1 += h2
- h1 %= self.table_size
- node = self.slots[h1]
- def print(self):
- print(f"Table size: {self.table_size}, Size: {self.size}")
- arr: list[str] = []
- for el in self.slots:
- if el is not None:
- arr.append(f"{el.key} : {el.value} : {el.enabled}")
- print(arr)
- if __name__ == '__main__':
- data: list[str] = []
- with open("test.txt", 'r') as f:
- s = f.readline().rstrip()
- while s != '':
- data.append(s)
- s = f.readline().rstrip()
- table = HashTable()
- print(data)
- for s in data:
- table.insert(s, s)
- table.print()
Add Comment
Please, Sign In to add comment