MCPcopy Create free account
hub / github.com/subbarayudu-j/TheAlgorithms-Python / HashTable

Class HashTable

data_structures/hashing/hash_table.py:5–82  ·  view source on GitHub ↗

Basic Hash Table example with open addressing and linear probing

Source from the content-addressed store, hash-verified

3
4
5class HashTable:
6 """
7 Basic Hash Table example with open addressing and linear probing
8 """
9
10 def __init__(self, size_table, charge_factor=None, lim_charge=None):
11 self.size_table = size_table
12 self.values = [None] * self.size_table
13 self.lim_charge = 0.75 if lim_charge is None else lim_charge
14 self.charge_factor = 1 if charge_factor is None else charge_factor
15 self.__aux_list = []
16 self._keys = {}
17
18 def keys(self):
19 return self._keys
20
21 def balanced_factor(self):
22 return sum([1 for slot in self.values
23 if slot is not None]) / (self.size_table * self.charge_factor)
24
25 def hash_function(self, key):
26 return key % self.size_table
27
28 def _step_by_step(self, step_ord):
29
30 print("step {0}".format(step_ord))
31 print([i for i in range(len(self.values))])
32 print(self.values)
33
34 def bulk_insert(self, values):
35 i = 1
36 self.__aux_list = values
37 for value in values:
38 self.insert_data(value)
39 self._step_by_step(i)
40 i += 1
41
42 def _set_value(self, key, data):
43 self.values[key] = data
44 self._keys[key] = data
45
46 def _colision_resolution(self, key, data=None):
47 new_key = self.hash_function(key + 1)
48
49 while self.values[new_key] is not None \
50 and self.values[new_key] != key:
51
52 if self.values.count(None) > 0:
53 new_key = self.hash_function(new_key + 1)
54 else:
55 new_key = None
56 break
57
58 return new_key
59
60 def rehashing(self):
61 survivor_values = [value for value in self.values if value is not None]
62 self.size_table = next_prime(self.size_table, factor=2)

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected