Python/data_structures/hashing/quadratic_probing.py

30 lines
743 B
Python
Raw Normal View History

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