TheAlgorithms-Python/data_structures/hashing/quadratic_probing.py

30 lines
746 B
Python
Raw Normal View History

2018-03-21 07:48:58 +08:00
#!/usr/bin/env python3
from hash_table import HashTable
2018-03-21 07:48:58 +08:00
class QuadraticProbing(HashTable):
"""
Basic Hash Table example with open addressing using Quadratic Probing
2018-03-21 07:48:58 +08:00
"""
2019-10-05 13:14:13 +08:00
2018-03-21 07:48:58 +08:00
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def _collision_resolution(self, key, data=None):
2018-03-21 07:48:58 +08:00
i = 1
2019-10-05 13:14:13 +08:00
new_key = self.hash_function(key + i * i)
2018-03-21 07:48:58 +08:00
2019-10-05 13:14:13 +08:00
while self.values[new_key] is not None and self.values[new_key] != key:
2018-03-21 07:48:58 +08:00
i += 1
2019-10-05 13:14:13 +08:00
new_key = (
self.hash_function(key + i * i)
if not self.balanced_factor() >= self.lim_charge
else None
)
2018-03-21 07:48:58 +08:00
if new_key is None:
break
return new_key