Added double hash.
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()