Advertisement
Guest User

Untitled

a guest
Jul 25th, 2016
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.22 KB | None | 0 0
  1. from collections import defaultdict
  2.  
  3. class UrlSaver():
  4.  
  5. def __init__(self):
  6. # hash table of all users, where each user has a value of a Set of their urls
  7. # using hashtable for constant insert and find, set for uniqueness and member testing syntax as well as constant insert and find
  8. self.userTable = defaultdict(lambda:Set())
  9.  
  10. # using hash(key=domain) of both hashes(ket=user, val = count of matching domains) tp avoid multiple additions and Set to record individual users for return
  11. # maintains constant time for all operations includeing keeping the mapping from domains to users current
  12. self.domainsTable = defaultdict(lambda:[{}, Set()])
  13.  
  14. def saveUrl(self, userToken, URL):
  15. self.addToUsers(userToken, URL)
  16.  
  17. def addToUsers(self, userToken, URL):
  18. if URL in self.userTable[userToken]:
  19. return False
  20. else:
  21. self.userTable[userToken].add(URL)
  22. self.addToDomains(userToken, URL)
  23.  
  24. def addToDomains(self, userToken, URL):
  25. if self.domainsTable[self.getDomain(URL)][0][userToken] == 0:
  26. self.domainsTable[self.getDomain(URL)][1].add(userToken)
  27. self.domainsTable[self.getDomain(URL)][0][userToken] += 1
  28.  
  29. #returns empty set if no URLs have been stored or User does not exist
  30. def getUrls(self, userToken):
  31. return self.userTable[userToken]
  32.  
  33. def removeUrl(self, userToken, URL):
  34. self.removeFromUsers(userToken, URL)
  35.  
  36. def removeFromUsers(self, userToken, URL):
  37. if URL in self.userTable[userToken]:
  38. self.userTable[userToken].discard(URL)
  39. self.removeFromDomains(userToken, URL)
  40. return True
  41. else:
  42. return False
  43.  
  44. def removeFromDomains(self, userToken, URL):
  45. self.domainsTable[self.getDomain(URL)][0][userToken] -= 1
  46. if self.domainsTable[self.getDomain(URL)][0][userToken] > 0:
  47. self.domainsTable[self.getDomain(URL)][1].discard(userToken)
  48.  
  49. def getUsersByDomain(self, domain):
  50. return self.domainsTable[domain][1]
  51.  
  52.  
  53. def getThreeHopNodes(node):
  54. nodes = []
  55. fetchNodes(node.A, 1, nodes)
  56. fetchNodes(node.B, 1, nodes)
  57. fetchNodes(node.C, 1, nodes)
  58. return nodes
  59.  
  60. def fetchNodes(current, depth, nodes):
  61. if current == None:
  62. return
  63. elif depth == 3:
  64. nodes.append(current)
  65. return
  66. else:
  67. fetchNodes(current.A, current + 1, nodes)
  68. fetchNodes(current.B, current + 1, nodes)
  69. fetchNodes(current.C, current + 1, nodes)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement