成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

實(shí)現(xiàn)線性時間匹配的Z算法

Z算法是一種可以實(shí)現(xiàn)線性時間匹配的算法,通過前綴串匹配,實(shí)現(xiàn)快速匹配。相比于經(jīng)典的KMP算法,Z算法更加易懂和易用。下面將介紹Z算法的原理以及代碼演示。 Z算法原理Z算法通過前綴串搜索,即一個字符串i

Z算法是一種可以實(shí)現(xiàn)線性時間匹配的算法,通過前綴串匹配,實(shí)現(xiàn)快速匹配。相比于經(jīng)典的KMP算法,Z算法更加易懂和易用。下面將介紹Z算法的原理以及代碼演示。

Z算法原理

Z算法通過前綴串搜索,即一個字符串i位開始的前綴串與該字符串前綴串匹配的最大長度。具體步驟如下:

1. 從i1位開始,比對前綴串,使用LR限制閱讀間隔。

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

3. 若i大于R即匹配失敗,從RLi開始重新匹配。

4. 若小于,可從前面匹配信息獲得相關(guān)信息。

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)

```

以上是關(guān)于Z算法的原理和代碼演示,希望能夠幫助您更好地理解并應(yīng)用這一線性時間匹配算法。

標(biāo)簽: