日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java实现算法导论中有限自动机字符串匹配算法

發(fā)布時(shí)間:2025/4/16 java 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java实现算法导论中有限自动机字符串匹配算法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這里實(shí)現(xiàn)了基于有限自動(dòng)機(jī)(Finite Automaton,FA)的模式匹配算法,算法的重點(diǎn)在于利用字符串的前后綴構(gòu)造模式P的自動(dòng)機(jī),具體結(jié)合導(dǎo)論中的說明來理解,可參考http://www.geeksforgeeks.org/searching-for-patterns-set-5-finite-automata/理解,參考代碼如下:

package cn.ansj;public class AtuomatonMatcher {final public static int NO_OF_CHARS=256;//假設(shè)字母表有256個(gè)字符//對于狀態(tài)k和給定的字符x,返回下一個(gè)狀態(tài)。M為pat的長度public static int getNextState(char[] pat, int M, int k, int x){// 因?yàn)?pat[0...k-1]x 和 pat 的前面都是是一樣的,如果x == pat[k]可直接返回。if (k < M && x == pat[k])return k+1;int ns, i; // ns 是下一個(gè)狀態(tài)// ns 最終是最長的那個(gè) prefix (同時(shí)也是pat[0..k-1]x)的后綴//從可能得最長的前綴位置開始,找到后break,即為所求for (ns = k; ns > 0; ns--) {if(pat[ns-1] == x){for(i = 0; i < ns-1; i++) {if (pat[i] != pat[k-ns+1+i])break;}if (i == ns-1)return ns;}}return 0;}/* 構(gòu)建FA */public static void computeTF(char[] pat, int M, int[][] TF){int state, x;for (state = 0; state <= M; ++state)for (x = 0; x < NO_OF_CHARS; ++x)TF[state][x] = AtuomatonMatcher.getNextState(pat, M, state, x);}/* 查找模式串 */public static void matcher(char[] pat, char[] txt){int M = pat.length;int N = txt.length;//TF數(shù)組存儲FA有限狀態(tài)機(jī)int[][] TF=new int[M+1][NO_OF_CHARS];AtuomatonMatcher.computeTF(pat, M, TF);//計(jì)算模式pat的有限自動(dòng)機(jī)// Process txt over FA.int i, state=0;for (i = 0; i < N; i++) {state = TF[state][txt[i]];if (state == M){int index=i-M+1;System.out.println("pattern found at index:"+index);} }}public static void main(String[] args){String strTxt="AABAACAADAABAAABAA";String strPat="AABA";char[] txt = strTxt.toCharArray();char[] pat = strPat.toCharArray();AtuomatonMatcher.matcher(pat, txt);} }
執(zhí)行結(jié)果:

pattern found at index:0 pattern found at index:9 pattern found at index:13



總結(jié)

以上是生活随笔為你收集整理的Java实现算法导论中有限自动机字符串匹配算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。