AC自動機演算法 C實現 注釋

2022-05-19 03:14:50 字數 1411 閱讀 6612

最近在看字串匹配演算法,參考了文章:

以下我給出了ac演算法的c語言實現,題目是

/*

* ac.c--多模式匹配演算法

** created on: jul 14, 2011

* author: root

*/#include

<

stdio.h

>

#include

<

malloc.h

>

#include

<

stdlib.h

>

#include

<

string

.h>

struct

node

;typedef

struct

node node;

node *q[

5001

];//

char

keyword[

51];

//char

str[

1000001

];//

字串int

head, tail;

//佇列的頭、尾指標

/*插入節點到字典樹中

*/void

insert(

char

*str,node

*root) /*

如果不存在那個節點,首先得建立節點

*/p =p

->

next[index];i++

;}p->

count =1

;//表示此節點為最後乙個詞}/*

失敗指標的建立

*/void

build_fail(node

*root)

elsep =

p->

fail;

/*如果上乙個if不成立,則繼續向上查詢*/}

if(p

==null)

}q[head

++]

=temp

->

next[i];}}

}}intquery(node

*root,

char

*str)

//統計匹配到的關鍵字i++

;}return

cnt;

}int

main()

build_fail(root);

//建立失敗指標

scanf("%s

", str);

printf(

"%d\n

", query(root,str));

//根據輸入字串查詢關鍵字出現次數

}return0;

}

AC自動機演算法

ac自動機簡介 首先簡要介紹一下ac自動機 aho corasickautomation,該演算法在1975年產生於貝爾實驗室,是著名的多模匹配演算法之一。乙個常見的例子就是給出n個單詞,再給出一段包含m個字元的文章,讓你找出有多少個單詞在文章裡出現過。要搞懂ac自動機,先得有字典樹trie和kmp...

AC自動機演算法

ac自動機簡介 首先簡要介紹一下ac自動機 aho corasick automation,該演算法在1975年產生於貝爾實驗室,是著名的多模匹配演算法之一。乙個常見的例子就是給出n個單詞,再給出一段包含m個字元的文章,讓你找出有多少個單詞在文章裡出現過。要搞懂ac自動機,先得有字典樹trie和km...

演算法 AC自動機

這篇部落格拖了好久好久,真是尷尬,原因大概是我感覺很多東西,都是直覺,有種只可意會不可言傳的味道,想完全搞懂,但後來仔細想想,ac自動機好像本來就不是乙個非常非常確定的演算法,比如說,我該拿覺很多情況可以把演算法卡成n 2。所以拖了很久,醬紫。先談談ac自動機是什麼。我們知道kmp,可以快速的對乙個...