首页 新闻 会员 周边

算法导论 11.3-3 求长字符串散列值

0
悬赏园豆:10 [待解决问题]

11.3-3  假设一个长度为r的字符串被散列到m个槽中,方法是将其视为一个以128为基数的数,然后应用除法方法。很容易把数m表示为一个32位的机器字,但对长度为r的字符串,由于他被当作以128为基数的数来处理,就要占用若干个机器字。假设应用除法来计算一个字符串的散列值,那么如何才能除了该串本身占用的空间外,只利用常数个机器字?

解题思路:
        模运算有下述性质:
(a + b) % m = (a % m + b % m) % m ................(1)
(a - b) % m = (a % m - b % m) % m....................(2)
(a * b) % m = (a % m * b % m) % m....................(3)
而一个长度为n的字符串x可以表示为  其中为为x第i个字符, p =8 。
result ← 0 
middle  ← 0 
const  ← 128 mod m 
for i ← 1 to length[x]
do  result  ← (result * const) mod m
                 middle  ← x[i] mod m
                 result ← (result + middle) mod m
请能告诉我这样子做到底可以?有什么不对的地方吗?
大兔子_快跑的主页 大兔子_快跑 | 初学一级 | 园豆:104
提问于:2012-05-13 20:14
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册