Added double hash.
authorEugen Sawin <sawine@me73.com>
Tue, 14 Jun 2011 22:12:19 +0200
changeset 3b3a61fa4c8d7
parent 2 aa4e1ccda9ab
child 4 7301096bb430
Added double hash.
src/double_hash.py
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/src/double_hash.py	Tue Jun 14 22:12:19 2011 +0200
     1.3 @@ -0,0 +1,39 @@
     1.4 +"""
     1.5 +Name: string_hash -  a string hashing program
     1.6 +Description: Basic string hashing program according to Theory I lecture.
     1.7 +Author: Eugen Sawin <sawine@informatik.uni-freiburg.de>
     1.8 +"""
     1.9 +
    1.10 +def main():    
    1.11 +    args = parse_arguments()
    1.12 +    used = set()
    1.13 +    for key in args.values.split():
    1.14 +        print "%s: %i" % (key, double_hash(int(key), used))
    1.15 +
    1.16 +def double_hash(k, used):
    1.17 +    j = 0
    1.18 +    code = (h(k) - s(j, k)) % 15
    1.19 +    while code in used:
    1.20 +        j += 1
    1.21 +        code = (h(k) - s(j, k)) % 15
    1.22 +    used.add(code)
    1.23 +    return code
    1.24 +
    1.25 +def s(j, k):
    1.26 +    return j * h2(k)
    1.27 +
    1.28 +def h(k):
    1.29 +    return k % 15
    1.30 +
    1.31 +def h2(k):
    1.32 +    return 1 + (k % 13) 
    1.33 +
    1.34 +from argparse import ArgumentParser
    1.35 +
    1.36 +def parse_arguments():
    1.37 +    parser = ArgumentParser(description="Returns the hash for given string using the double-hash technique.")
    1.38 +    parser.add_argument("values", help="values")    
    1.39 +    return parser.parse_args()
    1.40 +
    1.41 +if __name__ == "__main__":
    1.42 +    main()