- 1、本文档共101页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构应用
1 void insert(char *str,node *root){ 2 node *p=root; 3 int i=0,index; 4 while(str[i]){ 5 index=str[i]-a; 6 if(p-next[index]==NULL) p-next[index]=new node(); 7 p=p-next[index]; 8 i++; 9 } 10 p-count++; //在单词的最后一个节点count+1,代表一个单词11 } 构造失败指针 构造失败指针的过程概括起来就一句话:设这个节点上的字母为C,沿着他父亲的失败指针走,直到走到一个节点,他的儿子中也有字母为C的节点。然后把当前节点的失败指针指向那个字母也为C的儿子。如果一直走到了root都没找到,那就把失败指针指向root。 具体操作起来只需要:先把root加入队列(root的失败指针指向自己或者NULL),这以后我们每处理一个点,就把它的所有儿子加入队列,队列为空。 构造失败指针例图 1 void build_ac_automation(node *root){ 2 int i; 3 root-fail=NULL; //root的失败指针指向自己或者NULL 4 q[head++]=root; //把root加入队列 5 while(head!=tail){ 6 node *temp=q[tail++]; 7 node *p=NULL; 8 for(i=0;i26;i++){ 9 if(temp-next[i]!=NULL){ 10 if(temp==root) temp-next[i]-fail=root; 11 else{ 12 p=temp-fail; //p指向h节点所指的节点,也就是root13 while(p!=NULL){ 14 if(p-next[i]!=NULL){ 15 temp-next[i]-fail=p-next[i]; 16 break; 17 } 18 p=p-fail; 19 } 20 if(p==NULL) temp-next[i]-fail=root; 21 } 22 q[head++]=temp-next[i]; 23 } 24 } 25 } 26 } 匹配单词 最后,我们便可以在AC自动机上查找模式串中出现过哪些单词了。 匹配过程分两种情况: (1)当前字符匹配,表示从当前节点沿着树边有一条路径可以到达目标字符,此时只需沿该路径走向下一个节点继续匹配即可,目标字符串指针移向下个字符继续匹配; (2)当前字符不匹配,则去当前节点失败指针所指向的字符继续匹配,匹配过程随着指针指向root结束。重复这2个过程中的任意一个,直到模式串走到结尾为止。 1 int query(node *root){ 2 int i=0,cnt=0,index,len=strlen(str); 3 node *p=root; 4 while(str[i]){ 5 index=str[i]-a; //index=0~26 6 while(p-next[index]==NULL p!=root) p=p-fail; //p指向p的失败指针所指向的节点 7 p=p-next[index]; //p指向index节点 8 p=(p==NULL)?root:p; 9 node *temp=p; 10
您可能关注的文档
最近下载
- 2025年档案管理员考试试题 .pdf VIP
- 万源储配煤基地建设可行性研究.pdf VIP
- 2024-2025学年广东省深圳市小升初分班考试数学试卷附答案解析.pdf VIP
- JTG F801-2017 公路工程质量检验评定标准 第一册 土建工程.docx VIP
- 新药临床试验监查—__培训课件.ppt VIP
- 项目4 光伏发电系统运行、维护及故障检修.ppt VIP
- 传染病培训试题及答案.pdf VIP
- (正式版)-B 7692-2012 涂装作业安全规程 涂漆前处理工艺安全及其通风净化.docx VIP
- 现浇箱梁满堂支架(盘扣式)专项施工方案.docx VIP
- 一种自动控制工件落差的防磕碰接料装置.pdf VIP
文档评论(0)