自动机理论的开端

1.学习自动机理论,体会基本的思想

2.根据算法导论:#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
struct data{ char ch[1002];};
data ch1,ch2;
int l1,l2,f[1002][28];
void init(){
scanf("%s\n%s",&ch1.ch,&ch2.ch);
l1=strlen(ch1.ch); l2=strlen(ch2.ch);
for (int i=l1;i>=1;i--) ch1.ch[i]=ch1.ch[i-1];
for (int i=l2;i>=1;i--) ch2.ch[i]=ch2.ch[i-1];
}


bool check(int k,int q,int a){
for (int i=1;i<k;i++)
 if (ch2.ch[i]!=ch2.ch[q-k+i+1]) return 0;
if (ch2.ch[k]!=a+96) return 0;
return 1;
}


void COMPUTE_TRANSITION_FUNCTION(){
    for (int q=0;q<=l2;q++)
 for (int a=1;a<=3;a++)
{  int k=min(l2,q+1);
  while (!check(k,q,a)&&(k>0)) k--;
  f[q][a]=k;
}
}


void FINITE_AUTOMATON_MATCHER(){
int q=0;
for (int i=1;i<=l1;i++){
q=f[q][ch1.ch[i]-96];
if (q==l2) printf("%d ",i-l2+1);
}
}


int main(){
init();
COMPUTE_TRANSITION_FUNCTION();
FINITE_AUTOMATON_MATCHER();
//for (int i=0;i<=l2;i++){
 //for (int j=1;j<=3;j++) cout<<f[i][j]<<" ";
 //cout<<endl;}
return 0;
}

你可能感兴趣的:(自动机理论的开端)