mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-06-18 03:22:17 +08:00
sync with rtgui-0.6
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
#!/usr/bin/env python
|
||||
"""
|
||||
This example shows how to use the class Graph.
|
||||
|
||||
The class implements a graph with 'N' vertices. First, you connect the
|
||||
graph with edges, which have a desired value associated. Then the vertex
|
||||
values are assigned, which will fail if the graph is cyclic. The vertex
|
||||
values are assigned such that the two values corresponding to an edge add
|
||||
up to the desired edge value (mod N).
|
||||
"""
|
||||
import sys
|
||||
|
||||
sys.path.append('..')
|
||||
from perfect_hash import Graph
|
||||
|
||||
G = Graph(3)
|
||||
assert G.assign_vertex_values() == True
|
||||
|
||||
# Now we make an edge between vertex 0 and 1 with desired edge value 2:
|
||||
G.connect(0, 1, 2)
|
||||
|
||||
# Make another edge 1:2 with desired edge value 1:
|
||||
G.connect(1, 2, 1)
|
||||
|
||||
# The graph is still acyclic, and assigning values works:
|
||||
assert G.assign_vertex_values() == True
|
||||
assert G.vertex_values == [0, 2, 2]
|
||||
|
||||
# What do these values mean?
|
||||
# When you add the values for edge 0:1 you get 0 + 2 = 2, as desired.
|
||||
# For edge 1:2 you add 2 + 2 = 4 = 1 (mod 3), as desired.
|
||||
|
||||
# Adding edge 0:2 produces a loop, so the graph is no longer acyclic.
|
||||
# Assigning values fails.
|
||||
G.connect(0, 2, 0)
|
||||
|
||||
assert G.assign_vertex_values() == False
|
||||
|
||||
|
||||
print 'OK'
|
||||
@@ -0,0 +1,15 @@
|
||||
|
||||
|
||||
all:
|
||||
true
|
||||
|
||||
|
||||
clean:
|
||||
true
|
||||
|
||||
|
||||
test:
|
||||
./generate_hash.py
|
||||
./PerfHash.py
|
||||
./Graph.py
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
#!/usr/bin/env python
|
||||
"""
|
||||
This example shows how to use the class PerfHash.
|
||||
|
||||
This class is designed for creating perfect hash tables at run time,
|
||||
which should be avoided, in particulat inserting new keys is
|
||||
prohibitively expensive since a new perfect hash table needs to be
|
||||
constructed. However, this class can be usefull for testing.
|
||||
|
||||
For practical programming purposes in Python the class PerfHash
|
||||
should never be used because Python's built-in dictionary is very
|
||||
efficient and always faster than PerfHash.
|
||||
"""
|
||||
|
||||
import sys
|
||||
|
||||
sys.path.append('..')
|
||||
from perfect_hash import PerfHash
|
||||
|
||||
|
||||
month = dict(zip('jan feb mar apr may jun jul aug sep oct mov dec'.split(),
|
||||
range(1, 13)))
|
||||
|
||||
d = PerfHash(month)
|
||||
|
||||
|
||||
for m in month:
|
||||
assert month[m] == d[m]
|
||||
|
||||
d[True] = False
|
||||
|
||||
assert d[True] == False
|
||||
|
||||
for i in xrange(10): # very expensive
|
||||
d[i] = 2*i*i + 3*i -7
|
||||
|
||||
assert d[4] == 37
|
||||
|
||||
|
||||
print 'OK'
|
||||
@@ -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'
|
||||
Reference in New Issue
Block a user