假设在文本‘ababcabccabccacbab’中查找模式‘abccac’,分别写出采用bf算法和kmp算法的串匹配过程代码
时间: 2024-10-25 08:13:00 浏览: 61
算法分析与设计复习大纲.pdf
在Python中,我们通常使用动态规划优化的KMP算法来进行字符串匹配,而朴素的BF(Brute Force,暴力搜索)算法则相对较简单。以下是两种算法的基本实现:
**BF算法(暴力搜索):**
```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"
print("BF算法匹配结果:", brute_force_search(text, pattern))
```
**KMP算法(Knuth-Morris-Pratt):**
KMP算法需要先预处理模式串的next数组,然后在实际搜索过程中利用这个数组跳过不必要的比较。
```python
def preprocess_pattern(pattern):
next = [0] * len(pattern)
j = -1
for i in range(1, len(pattern)):
while j != -1 and pattern[j+1] != pattern[i]:
j = next[j]
if pattern[j+1] == pattern[i]:
j += 1
next[i] = j
return next
def kmp_search(text, pattern):
text_len, pattern_len = len(text), len(pattern)
next = preprocess_pattern(pattern)
i, j = 0, 0
while i < text_len:
if text[i] == pattern[j]: # 匹配字符
i += 1
j += 1
else: # 发生错误,尝试跳过
if j != 0:
j = next[j-1]
else:
i += 1
return j if j == pattern_len else -1
text = "ababcabccabccacbab"
pattern = "abccac"
print("KMP算法匹配结果:", kmp_search(text, pattern))
```
**相关问题--:**
1. BF算法的时间复杂度是多少?
2. KMP算法相较于BF有何优势?
3. KMP算法的preprocess_pattern函数如何工作?
阅读全文