確定型有限自動機(DFA)
陷阱狀態(a trap state)
陷阱狀態(也叫死狀態或匯點狀態)是一個非接受狀態,一旦進入便永遠出不來:每個符號都繞回同一個狀態。它就像計算的「蟑螂屋」——輸入住了進去,計算卻再也走不出去到任何有用的地方。到達陷阱狀態意味「這個字串已經出錯了;無論接下來是什麼,答案都會是否」。
陷阱狀態之所以存在,多半是為了記帳。DFA 的轉移函數必須是全函數——對每個狀態與每個符號都有定義——所以當規格中有個「禁止」的動作、本該讓字串注定失敗時,你不能就把那支箭頭省略掉。取而代之,你把它導向一個陷阱狀態,再讓陷阱對每個符號都迴圈到自己,這樣機器就會禮貌地讀完剩下的輸入,並正確地以拒絕作結。陷阱正是 DFA 在不當機的前提下說「我偵測到一個違規」的方式。
具體來說,假設你想要「不含子字串 bb」的字串。你追蹤「上一個符號是不是 b?」,第一次看到連續第二個 b 時就跳到陷阱狀態並永遠停在那裡、予以拒絕。人們常為了減少凌亂而在圖中省略陷阱,並約定「任何缺失的箭頭都通往一個隱含的死狀態」——但對於完全形式化的 DFA,陷阱確實是存在的。
在 {a,b} 上「不出現連續兩個 b」的 DFA:狀態 S(沒問題,上一個不是 b)、L(沒問題,上一個是 b)、D(陷阱)。δ:S,a->S;S,b->L;L,a->S;L,b->D;D,a->D;D,b->D。S 與 L 接受;D 永遠拒絕。對 abba:S-(a)->S-(b)->L-(b)->D-(a)->D,停在 D,被拒絕。
陷阱狀態對每個符號都迴圈到自己,且永不接受——一旦注定失敗,便永遠失敗。
陷阱狀態依定義是非接受的;一個你永遠離不開、但本身「是」接受狀態的狀態是另一回事(一個「成功匯點」),而非陷阱。
又称
另见