算法导论的11.3-3解答

来源:互联网 发布:数据库设置主键和外键 编辑:程序博客网 时间:2024/06/06 20:21

题目描述:h(k)=k mod m,m =2^p-1,k为按基数2^p表示的字符串,证明:如果串x可由串y通过其自身的字符置换排列导出,则x和y具有相同的散列值。

证明过程:

假设V(y)表示字符串y用基数2^p表示的值。那么在字符串y中,它的a位和b位(从右往左数,最右的为0位)发生置换得到字符串x,则V(x)=V(y)-y[a]*2^(p*a)+y[b]*2^(p*a)+y[a]*2^(p*b)-y[b]*2^(p*b)

那么V(x)-V(y)=((y[b]-y[a])*(2^(p*a)-2^(p*b))) mod (2^p-1)

不失一般性,我们可以假设a>b,那么有

V(x)-V(y)=((y[b]-y[a])*2^(p*b)*(2^(p*a-p*b)-1)) mod (2^p-1)

又因为

2^(p*a-p*b)-1 = 0 mod (2^p -1)

所以

V(x)-V(y) = 0 mod (2^p-1)

因此在一个字符串中交换两个位置的字符后所得到的新字符串的散列值是不变。也就是字符串中随意位置的字符交换并不会影响它的散列值。

也就是说,如果串y通过自身字符置换排列导出的串x,那么两者是具有相同的散列值。

0 0
原创粉丝点击