非確定型有限自動機(NFA)

ε-封閉(the epsilon-closure)

/ epsilon = EP-si-lon (the symbol ε) /

如果機器有免費的 ε-移動,那麼「站在某一個狀態」其實意味著你不讀任何東西就已經可能身處好幾個狀態。一個狀態的 ε-封閉,回答的是這個問題:「從這裡出發、只走免費的 ε-移動,我可能溜進的每一個狀態——完整清單是什麼?」它總是包含狀態自己,再加上經由任意一串 ε-轉移可達的所有狀態。

計算它就像只用 ε 邊去探索一張圖。先讓集合裝入給定的狀態。然後反覆做:對集合中已有的每個狀態,加入它經一次 ε-移動可達的所有狀態;當沒有新東西出現時就停止。結果 ECLOSE(q) 就是那個穩定的集合。對一「組」狀態,ε-封閉就是其各成員的封閉之聯集。因為狀態只有有限多個,這個過程一定會終止。

ε-封閉正是讓我們能乾淨地模擬 ε-NFA 的小工具。要跑這種機器:先進入起始狀態的 ε-封閉;要讀一個符號 a,就從目前的集合在 a 上移動,再取結果的 ε-封閉;若最終集合碰到接受狀態就接受。完全相同的這些封閉,會成為子集構造法所產生的等價 DFA 的「狀態」——以 ε 取封閉,正是該構造法吸收掉免費移動、使 DFA 永遠不再需要它們的方法。

假設 δ(1, ε) = {2}、δ(2, ε) = {3},而狀態 3 沒有 ε-移動。那麼 ECLOSE(1) = {1, 2, 3}:你可以從 1 自由溜到 2,再從 2 自由溜到 3,所以這三個在空字串上都可達。ECLOSE(3) = {3}。

一個狀態的 ε-封閉,就是經免費移動可達的一切,包含狀態本身。

務必把狀態自己納入它自己的 ε-封閉,即使它沒有任何向外的 ε-移動——忘了這一點,正是模擬 ε-NFA 時最經典的錯誤。

又称
epsilon-closure of a stateε-closureε-閉包