Advertisement
Guest User

Untitled

a guest
Nov 11th, 2019
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.41 KB | None | 0 0
  1. class Hashtable:
  2. class Node:
  3. def __init__(self, key, val, next=None):
  4. self.key = key
  5. self.val = val
  6. self.next = next
  7.  
  8. def __init__(self, n_buckets=1000):
  9. self.buckets = [None] * n_buckets
  10.  
  11. def __setitem__(self, key, val):
  12. bucket_idx = hash(key) % len(self.buckets)
  13. b = self.buckets[bucket_idx]
  14. while b:
  15. if b.key == key:
  16. b.val = val
  17. return
  18. b = b.next
  19. else:
  20. self.buckets[bucket_idx] = Hashtable.Node(key, val, next=self.buckets[bucket_idx])
  21.  
  22. def __getitem__(self, key):
  23. bucket_idx = hash(key) % len(self.buckets)
  24. b = self.buckets[bucket_idx]
  25. while b:
  26. if b.key == key:
  27. return b.val
  28. b = b.next
  29. else:
  30. raise KeyError()
  31.  
  32. def rehash(self, size):
  33. new_buckets = [None] * size
  34.  
  35. for x in self.buckets:
  36. n = x
  37. while n:
  38. bucket_idx = hash(x.key) % len(new_buckets)
  39. m = new_buckets[bucket_idx]
  40.  
  41. if m:
  42. m.next = m
  43. m = x
  44. else:
  45. m = x
  46. n = n.next
  47.  
  48. self.buckets = new_buckets
  49. print(self.buckets)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement