實現(xiàn)線性時間匹配的Z算法
Z算法是一種可以實現(xiàn)線性時間匹配的算法,通過前綴串匹配,實現(xiàn)快速匹配。相比于經(jīng)典的KMP算法,Z算法更加易懂和易用。下面將介紹Z算法的原理以及代碼演示。 Z算法原理Z算法通過前綴串搜索,即一個字符串i
Z算法是一種可以實現(xiàn)線性時間匹配的算法,通過前綴串匹配,實現(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算法的原理和代碼演示,希望能夠幫助您更好地理解并應用這一線性時間匹配算法。