Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.96 KB | None | 0 0
  1. import random
  2.  
  3. class HashMap(object):
  4. """
  5. Klasa modeluje heš mapu
  6. """
  7. def __init__(self, capacity=8):
  8. """
  9. Konstruktor
  10.  
  11. Argumenti:
  12. - `capacity`: inicijalni broj mesta u lookup nizu
  13. - `prime`: prost broj neophodan heš funkciji
  14. """
  15. self._data = capacity * [None]
  16. self._capacity = capacity
  17. self._size = 0
  18. self._prime = 109345121
  19.  
  20. # konstante heširanja
  21. self._a = 1 + random.randrange(self._prime-1)
  22. self._b = random.randrange(self._prime)
  23.  
  24. def _hash(self, x):
  25. """
  26. Heš funkcija
  27.  
  28. Izračunavanje heš koda vrši se po formuli (ax + b) mod p.
  29.  
  30. Argument:
  31. - `x`: vrednost čiji se kod računa
  32. """
  33. hashed_value = (hash(x)*self._a + self._b) % self._prime
  34. compressed = hashed_value % self._capacity
  35. return compressed
  36.  
  37. def __setitem__(self, key, value):
  38. compressed_key = self._hash(key)
  39. found = False
  40. if self._data[compressed_key] is None:
  41. self._data[compressed_key] = []
  42. self._data[compressed_key].append([key, value])
  43. else:
  44. for current_element in self._data[compressed_key]:
  45. if current_element[0] == key:
  46. current_element[1] = value
  47. found = True
  48. break
  49. if not found:
  50. self._data[compressed_key].append([key, value])
  51.  
  52. def __getitem__(self, item):
  53. compressed_key = self._hash(item)
  54. if self._data[compressed_key] is None:
  55. raise Exception("Ne postoji ovaj key")
  56. for element in self._data[compressed_key]:
  57. if element[0] == item:
  58. return element[1]
  59.  
  60. def __delitem__(self, key):
  61. compresed_key = self._hash(key)
  62.  
  63.  
  64.  
  65. mapa = HashMap()
  66. mapa[2] = 122
  67. mapa[2] = 566
  68. mapa[22] = 5541
  69.  
  70. print(mapa[2])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement