資料結構 匹配演算法

2021-07-23 09:44:43 字數 459 閱讀 3096

演算法實現

kmp

kmp真是學到現在為止最頭疼的乙個演算法,嗯我是渣渣

分兩部分 一、子串的next陣列;二、迴圈遍歷。

next陣列的意義是:第n項之前的若干項與第1到第next[n]-1項完全一樣(前驅相同)。

因此next陣列的尋找方式使用遞迴的想法:

對於當前位置i,有開頭的最大子串長度為n;

對i+1,若j+1==i+1,那麼最大子串長度為n+1;若j+1!=i+1,因為第j+1項和第next[j+1]有著同樣的前驅,那麼將j指向next[j+1]重新比較即可。

迴圈遍歷的方法:

從第一項開始,如果不等加一;相等i,j均加一;

對於第i項,如果相等i,j加一;

若不等,即i+1!=j+1,因為j+1和next[j+1]有著相同前驅,所以前驅項不用比較,j指向next[j+1]即可。

資料結構與演算法 動態匹配演算法

如下 示例 package algorithm 動態匹配演算法解決揹包問題 public class packed int weight 表示揹包中的最大容量 int m 4 定義乙個二維陣列表示存放的最大 int v new int weight.length 1 m 1 定義乙個二維陣列來表示將...

資料結構 模式匹配演算法

模式匹配 子串的定位操作。模式匹配演算法主要有 1 樸素的模式匹配演算法 2 kmp模式匹配演算法 next陣列 3 改進的kmp模式匹配演算法 nextval陣列 比較 1,時間複雜度 樸素的模式匹配演算法為o n m 1 m 效率很差,kmp演算法為o m n 大大避免重複遍歷情況。2,改進的k...

資料結構與演算法 暴力匹配演算法 KMP演算法

總結 如下 示例 package algorithm 暴力匹配演算法 思路 依次進行查詢 public class violencematch param s1 匹配的長字串 param s2 匹配的短字串 return 如果匹配成功,則返回長字串的第一次匹配成功的下索引,沒有則返回 1 publi...