Skip to content

Instantly share code, notes, and snippets.

@SamuraiT
Created March 1, 2014 15:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save SamuraiT/9291866 to your computer and use it in GitHub Desktop.
Save SamuraiT/9291866 to your computer and use it in GitHub Desktop.
easy Hashtable implementation from the Think Complexity book.
class LinearMap(object):
def __init__(self):
self.items = []
def add(self, k, v):
self.items.append((k, v))
def get(self, k):
for key, val in self.items:
if key == k:
return val
raise KeyError
def __str__(self):
return str(self.items)
class BetterMap(object):
def __init__(self, n=100):
self.maps = []
for i in range(n):
self.maps.append(LinearMap())
def find_map(self, k):
index = hash(k) % len(self.maps)
return self.maps[index]
def index(self, k):
print hash(k)
print len(self.maps)
return hash(k) % len(self.maps)
def add(self, k, v):
m = self.find_map(k)
m.add(k, v)
def get(self, k):
m = self.find_map(k)
return m.get(k)
def __str__(self):
return str(self.maps)
class HashMap(object):
def __init__(self):
self.maps = BetterMap(2)
self.num = 0
def get(self, k):
return self.maps.get(k)
def add(self, k, v):
if self.num == len(self.maps.maps):
self.resize()
self.maps.add(k, v)
self.num += 1
def resize(self):
new_maps = BetterMap(self.num * 2)
for m in self.maps.maps:
for k, v in m.items:
new_maps.add(k, v)
self.maps = new_maps
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment