generate_hash.py 999 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. #!/usr/bin/env python
  2. """
  3. This example shows how to use the function generate_hash.
  4. generate_hash(kdic, Hash)
  5. returns hash functions f1 and f2, and G for a perfect minimal hash.
  6. Input is dictionary 'kdic' with the keys and desired hash values.
  7. 'Hash' is a random hash function generator, that means Hash(N) returns a
  8. returns a random hash function which returns hash values from 0..N-1.
  9. """
  10. import sys
  11. import random, string
  12. sys.path.append('..')
  13. from perfect_hash import generate_hash
  14. month = dict(zip('jan feb mar apr may jun jul aug sep oct mov dec'.split(),
  15. range(1, 13)))
  16. def mkRandHash(N):
  17. """
  18. Return a random hash function which returns hash values from 0..N-1.
  19. """
  20. junk = "".join(random.choice(string.letters + string.digits)
  21. for i in xrange(10))
  22. return lambda key: hash(junk + str(key)) % N
  23. f1, f2, G = generate_hash(month, mkRandHash)
  24. for k, h in month.items():
  25. assert h == ( G[f1(k)] + G[f2(k)] ) % len(G)
  26. print 'OK'