資料結構 備考第四天? 串的模式匹配演算法 kmp(未優化) vs 暴力解法。
個人理解,就是字串中有對稱的串,若是這部分與主串匹配上的話,在之後的匹配失效後可以跳到字串對稱的下個位置。
// 粗暴法
void
pm_rude
(char str,
char sub[
], result *result)
else
time++;}
if(j >= sub_length)
// 若匹配成功返回 下標
else
result->time = time;
}// 計算next陣列
void
cal_next
(char arr,
int*next)
else
else}}
printf
("next陣列\n");
for(
int i =
0; i < arr_length; i++
)printf
("\n");
}// kmp演算法 version 1
void
pm_kmp_v1
(char str,
char sub,
int next[
], result *result)
else
else
} result->time++;}
if(sub_p >= sub_length)
else
}int
main()
;pm_rude
(str, sub, result1)
;printf
("位置暴力法:%d位置匹配,匹配次數:%d\n"
,result1->pos, result1->time)
;pm_kmp_v1
(str, sub, next, result2)
;printf
("kmp version1 法:%d位置匹配,匹配次數:%d\n"
,result2->pos, result2->time)
;system
("pause");
return0;
}
C 資料結構 DS串應用 KMP演算法
學習kmp演算法,給出主串和模式串,求模式串在主串的位置 演算法框架如下,僅供參考 第乙個輸入t,表示有t個例項 第二行輸入第1個例項的主串,第三行輸入第1個例項的模式串 以此類推 第一行輸出第1個例項的模式串的next值 第二行輸出第1個例項的匹配位置,位置從1開始計算,如果匹配成功輸出位置,匹配...
資料結構與演算法 暴力匹配演算法 KMP演算法
總結 如下 示例 package algorithm 暴力匹配演算法 思路 依次進行查詢 public class violencematch param s1 匹配的長字串 param s2 匹配的短字串 return 如果匹配成功,則返回長字串的第一次匹配成功的下索引,沒有則返回 1 publi...
資料結構 字串匹配KMP
kmp主要用於字串匹配 關鍵在於next陣列的求解,當匹配不成功的時候模式串的回退位置就由next陣列決定。next陣列只與主串有關,其求解過程就運用到了kmp思想,求解過程網上很多,個人覺得比較難以理解。next陣列應用,下標從1開始 字首與字尾的最大匹配長度,next i 為字首與字尾的最長匹配...