aho-corasick automaton,該演算法在2023年產生於貝爾實驗室,是著名的多模匹配演算法。
ac自動機是字典樹和kmp的結合。
可以解決的問題:給定多個單詞,再給乙個字串,問有多少個單詞在這個字串中出現過。
這個問題可以用kmp挨個串匹配,但是如果單詞數目多的話肯定會超時。
數中節點:
struct node;
sum統計以該字母結尾的單詞數目。fail指標相當於kmp中的next陣列。
具體可以看這篇文章,講的不錯:
題目:hdu2222
**:
#include #include #include #include #include using namespace std;
const int n = 10005;
const int l1 = 52;
const int l2 = 1000005;
struct node;
node *root;
queueq;
void init()
void insert(char *str)
tmp = tmp->next[x];
} tmp->sum++;
}void build()
else
p = p->fail;
}if(!p) tmp->next[i]->fail = root;
}q.push(tmp->next[i]);
} }}int ac_automation(char *str)
else
break;
tmp = tmp->fail;
} }return cnt;
}int main()
build();
scanf("%s", str2);
int cnt = ac_automation(str2);
printf("%d\n", cnt);
} return 0;
}
hdu 2222 ac自動機模板
題意 題意 給出n個串,然後給一篇文章,問這n個串有多少個在文章裡面出現過。trick n個串可能有相同的,需按照不同串處理。剛學ac自動機,沒學明白,這 也是照著別人部落格寫的,弱爆 include include include include include using namespace s...
hdu2222 (AC自動機模板)
題 學習出 主要是fail的建立。在跳的過程就是不斷跳fail,而不是跳到乙個fail再往下!include include include include include using namespace std typedef long long ll const int m 2e6 6 int ...
HDU2222 AC自動機 入門模板
hdu 222 keywords search ac 自動機入門模板題 調了一下午 因為輸入最後乙個字串打成了 d還有兩處取反符號打錯 wa了無數次 血淚史 以後要注意 ac自動機思路 這個演算法的目的 用幾個給定的模式串去在乙個串 t 中匹配 簡單概括實現方式 1.對所有的模式串建trie樹。2....