p587有限自动机
来源:互联网 发布:ios 可变字典添加数据 编辑:程序博客网 时间:2024/05/19 20:42
这是书上的普通版本:
#include<stdio.h>#include<string.h>#define maxn 1000#define maxm 100int f[maxm+1][26];int is_suffix(char p[],int k,int q,char a){ int i; if (k==0) return 1; if (p[k-1]!=a) return 0; for (i=0;i<k-1;i++) if (p[i]!=p[q-k+1+i]) return 0; return 1;}int comf(char p[],int m){ int q,k; for (q=0;q<=m;q++) { char a; for (a='a';a<='z';a++) { k=q+1<=m?q+1:m; while (!is_suffix(p,k,q,a)) k--; f[q][(int)(a-'a')]=k; } } return 0;}int match(char t[],char p[],int n,int m){ int q=0,i; for (i=0;i<n;i++) { q=f[q][(int)(t[i]-'a')]; if (q==m) printf("%d\n",i-m+1); } return 0;}int main(void){ char t[maxn],p[maxm]; int n,m; scanf("%s",t); scanf("%s",p); n=strlen(t); m=strlen(p); comf(p,m); match(t,p,n,m); return 0;}
这是32.4-8用π函数加速求delta函数的版本
#include<stdio.h>#include<string.h>#define maxn 1000#define maxm 100int dt[maxm+1][26],f[maxm+1];int computf(char p[]){ int i,m=strlen(p); f[1]=0; int k=0; for (i=2;i<=m;i++) { while (k>0&&p[k]!=p[i-1]) k=f[k]; if (p[k]==p[i-1]) k++; f[i]=k; } return 0;}int computdt(char p[]){ int q,m=strlen(p); char a; for (q=0;q<=m;q++) for (a='a';a<'z';a++) { int k=q; while (k>0&&p[k]!=a) k=f[k]; if (p[k]==a) k++; dt[q][(int)(a-'a')]=k; } return 0;}int match(char t[],char p[]){ int n=strlen(t),m=strlen(p),i,q=0; for (i=0;i<n;i++) { q=dt[q][(int)(t[i]-'a')]; if (q==m) printf("%d ",i-m+1); } return 0;}int main(void){ char t[maxn],p[maxm]; scanf("%s",t); scanf("%s",p); computf(p); computdt(p); match(t,p); return 0;}
0 0
- p587有限自动机
- 有限自动机
- 有限自动机
- 有限自动机
- 简单使用有限自动机
- 确定有限状态自动机
- 有限状态自动机
- [编译原理]有限自动机
- 有限自动机编程
- SCXML有限状态自动机
- 有限状态自动机
- 有限自动机总结
- NFA 有限自动机原理
- AC自动机(确定性有限状态自动机)
- 有限状态自动机 正则表达式
- 有限状态自动机的应用
- 算法 之 有限状态自动机
- Valid Number 有限状态自动机
- 编程之美 - 浮点数的精确表示
- assets文件夹下的系列图片获取存list
- java中文乱码解决之道(三)-----编码详情:伟大的创想---Unicode编码
- UIWebView的使用方法
- 299.LeetCode Bulls and Cows(easy)[字符串处理 map]
- p587有限自动机
- VS2015 无法解析的外部符号 __vsnwprintf_s
- 网络_HttpURLConnection_原始类
- [C语言][LeetCode][141]Linked List Cycle
- java中文乱码解决之道(四)-----java编码转换过程
- Java基础--并发编程基础(1)
- [SpringBoot实践]spring-data-mongo自定义Repository接口及其实现
- android 开发 时间的计算问题
- 25