src/double_hash.py
author Eugen Sawin <sawine@me73.com>
Mon, 20 Jun 2011 20:29:03 +0200
changeset 4 7301096bb430
permissions -rw-r--r--
Chained hashing.
sawine@3
     1
"""
sawine@3
     2
Name: string_hash -  a string hashing program
sawine@3
     3
Description: Basic string hashing program according to Theory I lecture.
sawine@3
     4
Author: Eugen Sawin <sawine@informatik.uni-freiburg.de>
sawine@3
     5
"""
sawine@3
     6
sawine@3
     7
def main():    
sawine@3
     8
    args = parse_arguments()
sawine@3
     9
    used = set()
sawine@3
    10
    for key in args.values.split():
sawine@3
    11
        print "%s: %i" % (key, double_hash(int(key), used))
sawine@3
    12
sawine@3
    13
def double_hash(k, used):
sawine@3
    14
    j = 0
sawine@3
    15
    code = (h(k) - s(j, k)) % 15
sawine@3
    16
    while code in used:
sawine@3
    17
        j += 1
sawine@3
    18
        code = (h(k) - s(j, k)) % 15
sawine@3
    19
    used.add(code)
sawine@3
    20
    return code
sawine@3
    21
sawine@3
    22
def s(j, k):
sawine@3
    23
    return j * h2(k)
sawine@3
    24
sawine@3
    25
def h(k):
sawine@3
    26
    return k % 15
sawine@3
    27
sawine@3
    28
def h2(k):
sawine@3
    29
    return 1 + (k % 13) 
sawine@3
    30
sawine@3
    31
from argparse import ArgumentParser
sawine@3
    32
sawine@3
    33
def parse_arguments():
sawine@3
    34
    parser = ArgumentParser(description="Returns the hash for given string using the double-hash technique.")
sawine@3
    35
    parser.add_argument("values", help="values")    
sawine@3
    36
    return parser.parse_args()
sawine@3
    37
sawine@3
    38
if __name__ == "__main__":
sawine@3
    39
    main()