您的位置:首页 > 编程语言 > Go语言

MIT Introduction to Algorithms 学习笔记(十)

2016-01-19 12:25 741 查看
Lecture 9: Hashing II: Table Doubling,Karp-Rabin

散列表应该有多大?



理想状态:

根据需要改变大小.

(重散列)Rehashing







增长:





散列表长度成倍增长是个好选择.

删除:





字符串匹配(String Matching)

Simple Algorithm:



Karp-Rabin Algorithm:



python代码:

def karp_rabin(T, P):
n = len(T)
m = len(P)
d = 256
q = 101
h = d ** (m - 1) % q

p = 0
t = 0
for i in range(m):
p = (d*p + ord(P[i])) % q
t = (d*t + ord(T[i])) % q

for s in range(n - m + 1):
print(s,p,t)
if p == t and T[s:s+m] == P:
return s
if s < n - m:
t = ( d * ( t - ord( T[s] ) * h ) + ord( T[s + m] ) ) % q
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法导论 python hash