Skip to content

Instantly share code, notes, and snippets.

@yum-dev
Last active July 8, 2020 16:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yum-dev/ea0a9020cfd294c7edd0b6d4a3b821d3 to your computer and use it in GitHub Desktop.
Save yum-dev/ea0a9020cfd294c7edd0b6d4a3b821d3 to your computer and use it in GitHub Desktop.
hashtable wihout collision
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()
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()
130
[None, 130, None, None, None, None, None, None, 300, 200]
[None, 130, None, None, None, None, None, None, None, 200]
[[], [], [], [], []]
None
[[], [('112233445', 1)], [], [], []]
[[], [('112233445', 2)], [], [], []]
[[], [], [], [], []]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment