匹配——散列法

散列法在无回溯模式匹配中的应用

接前面

无回溯的模式匹配 有更快的方法:

 >>> 'aabcbabcaabcaababc'.find('abcaababc') 
9

如果只是找子字符串到这里就可以结束了。

散列法

书上是在高级字典里讲散列法的。函数的选择,碰撞的处理是关键。
在这里插入图片描述

对比前后缀

他们都像是拿着一把尺子在比对。计算机应该发挥算数的优势。我们把匹配字符加起来求和,再看目标字符那一块加了和一样不就行了吗?

    def hematch(s,t):
        def he(st):
            sum = 0
            for char in st:
                sum += ord(char)
            return sum
        i = len(t)
        match = he(t) - he(s[:i])
        while match:
            i += 1
            match = match - s[i-len(t)] + s[i]
        print(i-len(t))

调用hematch(‘aabcbabcaabcaababc’,‘abcaababc’)输出的怎么是0

散列函数的选择

我选择和是举个例子好讲后面的碰撞的处理。散列函数有数字分析法、折叠法、中平方法、基数转换法、除法。

碰撞的处理

碰撞冲突的时候再比一下就可以了。它也有冲突的,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值