總結
**如下(示例):
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 ...