A hash tábla egy adatszerkezet, amely kulcs-érték párokat tárol, és rendkívül hatékony az adatkeresés, beszúrás és törlés szempontjából. A hash tábla egy kulcshoz tartozó értéket egy hash függvény segítségével egy adott indexre térképez egy tömbben vagy egy másik adatszerkezetben.
class HashTable:
def __init__(self, size):
self.size = size
self.table = for _ in range(size)]
def hash_function(self, key):
return hash(key) % self.size
def insert(self, key, value):
index = self.hash_function(key)
# Ellenőrizzük, hogy a kulcs már létezik-e
for pair in self.table:
if pair == key:
pair = value
return
# Ha nem létezik, beszúrjuk
self.table.append()
def search(self, key):
index = self.hash_function(key)
for pair in self.table:
if pair == key:
return pair
return None # Kulcs nem található
def delete(self, key):
index = self.hash_function(key)
for pair in self.table:
if pair == key:
self.table.remove(pair)
return True
return False # Kulcs nem található
def __str__(self):
return str(self.table)
# Példa használat
hash_table = HashTable(10)
hash_table.insert("alma", 5)
hash_table.insert("körte", 7)
hash_table.insert("szilva", 12)
print("Hash tábla tartalma:", hash_table)
print("Keresés (alma):", hash_table.search("alma"))
hash_table.delete("alma")
print("Hash tábla alma törlése után:", hash_table)
Hash tábla tartalma: ], ], ], , , , , , , ] Keresés (alma): 5 Hash tábla alma törlése után: , ], ], , , , , , , ]
class OpenAddressingHashTable:
def __init__(self, size):
self.size = size
self.table = * size
def hash_function(self, key):
return hash(key) % self.size
def probe(self, index):
return (index + 1) % self.size # Lineáris próbálkozás
def insert(self, key, value):
index = self.hash_function(key)
original_index = index
while self.table is not None and self.table != key:
index = self.probe(index)
if index == original_index:
raise Exception("Hash tábla tele")
self.table = (key, value)
def search(self, key):
index = self.hash_function(key)
original_index = index
while self.table is not None:
if self.table == key:
return self.table
index = self.probe(index)
if index == original_index:
break
return None
def delete(self, key):
index = self.hash_function(key)
original_index = index
while self.table is not None:
if self.table == key:
self.table = None
return True
index = self.probe(index)
if index == original_index:
break
return False
def __str__(self):
return str(self.table)
# Példa használat
hash_table = OpenAddressingHashTable(10)
hash_table.insert("alma", 5)
hash_table.insert("körte", 7)
hash_table.insert("szilva", 12)
print("Hash tábla tartalma:", hash_table)
print("Keresés (alma):", hash_table.search("alma"))
hash_table.delete("alma")
print("Hash tábla alma törlése után:", hash_table)
Hash tábla tartalma: Keresés (alma): 5 Hash tábla alma törlése után:
A hash tábla hatékony és széles körben alkalmazható adatszerkezet. Az ütközések megfelelő kezelése és a hash függvény kiválasztása kulcsfontosságú a teljesítmény maximalizálásában. A Python beépített szótárak is hash táblákon alapulnak, és könnyen használhatók.