守護石談學習Java之路
阿新 • • 發佈:2022-02-05
123
求求了,這對我真的很重要
AC 自動機
目錄自動機
OI 中「自動機」一般指「確定性有限狀態自動機」(deterministic finite automaton,DFA)
基本定義
DFA 一般是識別字符串,一個自動機 \(A\),若他能識別字符串 \(S\),則 \(A(S)=1\),否則 \(A(S)=0\) .
然後這個識別咋定義呢?當一個自動機讀入一個字串時,從初始狀態(根節點)起按照轉移函式一個一個字元地轉移 . 如果讀入完一個字串的所有字元後位於一個接受狀態,那麼我們稱這個自動機 接受 這個字串,反之我們稱這個自動機 不接受 這個字串 .(這個接受其實就是識別吧)
形式化定義
其實弄懂了基本定義,形式化定義就很明瞭了 .
一個 DFA 由如下五個東西
- 狀態集合 \(Q\) .
- 字符集 \(\Sigma\) .
- 狀態轉移函式 \(\sigma : Q\times \Sigma\to Q\) .
- 一個開始狀態 \(s\in Q\)(即根節點)
- 接收狀態集合 \(F\subseteq Q\) .
組成的五元組 \((Q,\Sigma,\sigma,s,F)\) .
常見自動機
- Trie:轉移函式就是 Trie 上一條邊,其能接受的字串就是插入到 Trie 中的字串(或者其字首,這取決於怎麼定義接受)
- 子序列自動機:能接受的字串是給定字串的所有子序列,轉移函式 \(trans(x, c)\)
- KMP 自動機:由 \(s\) 構造 的自動機能接受的字串是以 \(s\) 為子串的串 \(t\),轉移函式就是不斷跳 next 的過程(形式化的,here)
然後就是我們現在要說的 AC 自動機,還有比較牛逼的(廣義)字尾自動機(SAM),迴文自動機(PAM)啥的,然而我不會啊 qwq
Reference
- skyh 神仙的課件《字串演算法基礎》
- 自動機 - OI Wiki
- AC 自動機 - OI Wiki
以下是部落格簽名,正文無關
本文來自部落格園,作者:Jijidawang,轉載請註明原文連結:https://www.cnblogs.com/CDOI-24374/p/15968827.html
看完覺得有用請點個贊吧,