author | Eugen Sawin <sawine@me73.com> |
Mon, 20 Jun 2011 20:29:03 +0200 | |
changeset 4 | 7301096bb430 |
permissions | -rw-r--r-- |
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() |