2016 - 2024

感恩一路有你

实现线性时间匹配的Z算法

浏览量:3348 时间:2024-05-31 08:52:29 作者:采采

Z算法是一种可以实现线性时间匹配的算法,通过前缀串匹配,实现快速匹配。相比于经典的KMP算法,Z算法更加易懂和易用。下面将介绍Z算法的原理以及代码演示。

Z算法原理

Z算法通过前缀串搜索,即一个字符串i位开始的前缀串与该字符串前缀串匹配的最大长度。具体步骤如下:

1. 从i1位开始,比对前缀串,使用LR限制阅读间隔。

2. L-R即从0,也就是第一位字符开始匹配。

3. 若i大于R即匹配失败,从RLi开始重新匹配。

4. 若小于,可从前面匹配信息获得相关信息。

Z算法代码演示

```python

Z_Algorithm

def getZ(str):

import numpy as np

z (len(str), dtypeint64)

n len(str)

l r 0

for i in range(1, len(str)):

if i > r:

l r i

while r

r 1

z[i] r-l

r - 1

else:

k i - l

if z[k] < r-i 1:

z[i] z[k]

else:

l i

while r < n and str[r-l] str[r]:

r 1

z[i] r - l

z[0] len(str)

return z

concat pattern and text

def search(p,t):

concat p '$' t

z getZ(concat)

for i in range(len(z)):

if z[i] len(p):

print('Pattern found at index:', i-len(p)-1)

```

以上是关于Z算法的原理和代码演示,希望能够帮助您更好地理解并应用这一线性时间匹配算法。

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。