假设在文本"ababcabccabccacbab"中查找模式"abccac",分别写出采用 BF 算法和KMP算法的串匹配过程代码
时间: 2024-11-06 10:20:23 浏览: 18
算法分析与设计复习大纲.pdf
在计算机科学中,BF(Brute Force)算法和KMP(Knuth-Morris-Pratt)算法都是用于字符串匹配的经典方法。假设我们要在一个给定的长字符串 "ababcabccabccacbab" 中查找子串 "abccac",以下是两种算法的简单示例:
**BF(Brute Force)算法(线性搜索)**:
这个算法就是直接从头开始逐个字符比对,直到找到匹配或者遍历完整个字符串。
```python
def brute_force_search(text, pattern):
for i in range(len(text) - len(pattern) + 1): # 搜索范围
if text[i:i+len(pattern)] == pattern:
return i # 找到就返回起始位置
return -1 # 如果没找到就返回 -1
text = "ababcabccabccacbab"
pattern = "abccac"
match_index = brute_force_search(text, pattern)
```
**KMP算法**:
KMP算法通过预处理模式串,避免回溯,提高了效率。
```python
def compute_lps(pattern):
lps = [0] * len(pattern)
j = 0
for i in range(1, len(pattern)):
if pattern[i] == pattern[j]:
j += 1
lps[i] = j
else:
while j > 0 and pattern[i] != pattern[j]:
j = lps[j - 1]
return lps
def kmp_search(text, pattern):
lps = compute_lps(pattern)
i = j = 0
while i < len(text):
if text[i] == pattern[j]:
i += 1
j += 1
elif j > 0:
j = lps[j - 1]
else:
i += 1
return i - j if j == len(pattern) else -1
text = "ababcabccabccacbab"
pattern = "abccac"
match_index = kmp_search(text, pattern)
```
阅读全文