summaryrefslogtreecommitdiff
path: root/components/rtgui/utils/perfect_hash/example-Python/generate_hash.py
diff options
context:
space:
mode:
Diffstat (limited to 'components/rtgui/utils/perfect_hash/example-Python/generate_hash.py')
-rw-r--r--components/rtgui/utils/perfect_hash/example-Python/generate_hash.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/components/rtgui/utils/perfect_hash/example-Python/generate_hash.py b/components/rtgui/utils/perfect_hash/example-Python/generate_hash.py
new file mode 100644
index 0000000000..dfe9f92186
--- /dev/null
+++ b/components/rtgui/utils/perfect_hash/example-Python/generate_hash.py
@@ -0,0 +1,38 @@
+#!/usr/bin/env python
+"""
+This example shows how to use the function generate_hash.
+
+generate_hash(kdic, Hash)
+
+returns hash functions f1 and f2, and G for a perfect minimal hash.
+Input is dictionary 'kdic' with the keys and desired hash values.
+'Hash' is a random hash function generator, that means Hash(N) returns a
+returns a random hash function which returns hash values from 0..N-1.
+"""
+
+import sys
+import random, string
+
+sys.path.append('..')
+from perfect_hash import generate_hash
+
+
+
+month = dict(zip('jan feb mar apr may jun jul aug sep oct mov dec'.split(),
+ range(1, 13)))
+
+def mkRandHash(N):
+ """
+ Return a random hash function which returns hash values from 0..N-1.
+ """
+ junk = "".join(random.choice(string.letters + string.digits)
+ for i in xrange(10))
+ return lambda key: hash(junk + str(key)) % N
+
+
+f1, f2, G = generate_hash(month, mkRandHash)
+
+for k, h in month.items():
+ assert h == ( G[f1(k)] + G[f2(k)] ) % len(G)
+
+print 'OK'