Last active
July 8, 2020 16:25
-
-
Save yum-dev/ea0a9020cfd294c7edd0b6d4a3b821d3 to your computer and use it in GitHub Desktop.
hashtable wihout collision
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Hashtable: | |
def __init__(self, size: int): | |
self.size = size | |
self.table = [[] for i in range(self.size)] | |
def get_hash(self, key): | |
return hash(key) % self.size | |
def __setitem__(self, key, value): | |
h = self.get_hash(key) | |
found = False | |
for index, element in enumerate(self.table): | |
if len(element)==2 and element[0]==key: | |
self.table[h][index] = (key, value) | |
found = True | |
break | |
if not found: | |
self.table[h].append((key, value)) | |
def __getitem__(self, key): | |
h = self.get_hash(key) | |
for element in self.table[h]: | |
if element[0] == key: | |
return element[1], True | |
def __delitem__(self, key): | |
h = self.get_hash(key) | |
for index, element in enumerate(self.table[h]): | |
if element[0] == key: | |
del self.table[h][index] | |
def emptyhash(self): | |
self.table = [[] for i in range(self.size)] | |
def main(): | |
t = Hashtable(5) | |
print(t.table) | |
print(t['something']) | |
key = '112233445' | |
value = 1 | |
t.__setitem__(key, value) | |
if t.__getitem__(key) == None: | |
t.__setitem__(key, value) | |
else: | |
t.__delitem__(key) | |
value = value + 1 | |
t.__setitem__(key, value) | |
print(t.table) | |
t.emptyhash() | |
print(t.table) | |
if __name__ == '__main__': | |
main() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Hashtable: | |
def __init__(self, size): | |
self.size = size | |
self.table = [None for i in range(self.size)] | |
def get_hash(self, key): | |
return hash(key) % self.size | |
def __setitem__(self, key, value): | |
h = self.get_hash(key) | |
self.table[h] = value | |
def __getitem__(self, key): | |
h = self.get_hash(key) | |
return self.table[h] | |
def __delitem__(self, key): | |
h = self.get_hash(key) | |
self.table[h] = None | |
def main(): | |
t = Hashtable(10) | |
t['1231114'] = 130 | |
print(t['1231114']) | |
t['1231115'] = 200 | |
t['1231113'] = 300 | |
print(t.table) | |
del t['1231113'] | |
print(t.table) | |
if __name__ == '__main__': | |
main() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
130 | |
[None, 130, None, None, None, None, None, None, 300, 200] | |
[None, 130, None, None, None, None, None, None, None, 200] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[[], [], [], [], []] | |
None | |
[[], [('112233445', 1)], [], [], []] | |
[[], [('112233445', 2)], [], [], []] | |
[[], [], [], [], []] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment