mirror of
https://github.com/TheAlgorithms/Python.git
synced 2025-02-17 14:58:10 +00:00
Added doctest & docstring to quadratic_probing.py (#10996)
* Added doctest & docstring to quadratic_probing.py * Update quadratic_probing.py * Update quadratic_probing.py
This commit is contained in:
parent
a8dfd403f6
commit
fe4aad0ec9
|
@ -12,6 +12,55 @@ class QuadraticProbing(HashTable):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
def _collision_resolution(self, key, data=None):
|
def _collision_resolution(self, key, data=None):
|
||||||
|
"""
|
||||||
|
Quadratic probing is an open addressing scheme used for resolving
|
||||||
|
collisions in hash table.
|
||||||
|
|
||||||
|
It works by taking the original hash index and adding successive
|
||||||
|
values of an arbitrary quadratic polynomial until open slot is found.
|
||||||
|
|
||||||
|
Hash + 1², Hash + 2², Hash + 3² .... Hash + n²
|
||||||
|
|
||||||
|
reference:
|
||||||
|
- https://en.wikipedia.org/wiki/Quadratic_probing
|
||||||
|
e.g:
|
||||||
|
1. Create hash table with size 7
|
||||||
|
>>> qp = QuadraticProbing(7)
|
||||||
|
>>> qp.insert_data(90)
|
||||||
|
>>> qp.insert_data(340)
|
||||||
|
>>> qp.insert_data(24)
|
||||||
|
>>> qp.insert_data(45)
|
||||||
|
>>> qp.insert_data(99)
|
||||||
|
>>> qp.insert_data(73)
|
||||||
|
>>> qp.insert_data(7)
|
||||||
|
>>> qp.keys()
|
||||||
|
{11: 45, 14: 99, 7: 24, 0: 340, 5: 73, 6: 90, 8: 7}
|
||||||
|
|
||||||
|
2. Create hash table with size 8
|
||||||
|
>>> qp = QuadraticProbing(8)
|
||||||
|
>>> qp.insert_data(0)
|
||||||
|
>>> qp.insert_data(999)
|
||||||
|
>>> qp.insert_data(111)
|
||||||
|
>>> qp.keys()
|
||||||
|
{0: 0, 7: 999, 3: 111}
|
||||||
|
|
||||||
|
3. Try to add three data elements when the size is two
|
||||||
|
>>> qp = QuadraticProbing(2)
|
||||||
|
>>> qp.insert_data(0)
|
||||||
|
>>> qp.insert_data(999)
|
||||||
|
>>> qp.insert_data(111)
|
||||||
|
>>> qp.keys()
|
||||||
|
{0: 0, 4: 999, 1: 111}
|
||||||
|
|
||||||
|
4. Try to add three data elements when the size is one
|
||||||
|
>>> qp = QuadraticProbing(1)
|
||||||
|
>>> qp.insert_data(0)
|
||||||
|
>>> qp.insert_data(999)
|
||||||
|
>>> qp.insert_data(111)
|
||||||
|
>>> qp.keys()
|
||||||
|
{4: 999, 1: 111}
|
||||||
|
"""
|
||||||
|
|
||||||
i = 1
|
i = 1
|
||||||
new_key = self.hash_function(key + i * i)
|
new_key = self.hash_function(key + i * i)
|
||||||
|
|
||||||
|
@ -27,3 +76,9 @@ class QuadraticProbing(HashTable):
|
||||||
break
|
break
|
||||||
|
|
||||||
return new_key
|
return new_key
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import doctest
|
||||||
|
|
||||||
|
doctest.testmod()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user