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

2021-10-16 13:19:26 字數 1204 閱讀 5512

總結

**如下(示例):

package algorithm;

//暴力匹配演算法 思路:依次進行查詢

public class violencematch

/** *

* @param s1 匹配的長字串

* @param s2 匹配的短字串

* @return 如果匹配成功,則返回長字串的第一次匹配成功的下索引,沒有則返回-1

*/public static

intviolence

(string s1, string s2)

else

}//當j增長到s2的長度時,就表示已經遍歷完了整個s2

if(j==s2.length)

else

}}

**如下(示例):

package algorithm;

public class kmp

//得到部分匹配表next string是子字串

public static

int[

]next

(string s)

if(s.

charat

(i)== s.

charat

(j))

next[i]

= j;

}return next;

}/**

* @param s1 匹配的字串

* @param s2 子串

* @param next 部分匹配值

* @return 如果找到就返回第一次匹配的索引,如果沒找到就返回-1

*/public static

intkmpsearch

(string s1, string s2,

int[

] next)

if(s1.

charat

(i)== s2.

charat

(j))

if(j == s2.

length()

)}return-1;}}

暴力匹配就是每次移動乙個位置。kmp有點巧妙,想深入理解看對應的鏈結,這裡記住公式就好了。

km演算法與最佳匹配

km演算法 該演算法是通過給每個頂點乙個標號 叫做頂標 來把求最大權匹配的問題轉化為求完備匹配的問題的。設頂點xi的頂標為a i 頂點yj的頂標為b j 頂點xi與yj之間的邊權為w i,j 在演算法執行過程中的任一時刻,對於任一條邊 i,j a i b j w i,j 始終成立。km演算法的正確性...

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

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

資料結構 匹配演算法

演算法實現 kmp kmp真是學到現在為止最頭疼的乙個演算法,嗯我是渣渣 分兩部分 一 子串的next陣列 二 迴圈遍歷。next陣列的意義是 第n項之前的若干項與第1到第next n 1項完全一樣 前驅相同 因此next陣列的尋找方式使用遞迴的想法 對於當前位置i,有開頭的最大子串長度為n 對i ...