下推自動機(PDA)

確定型下推自動機(deterministic pushdown automaton)

確定型下推自動機是一台去除了猜測的 PDA:在任一時刻最多只有「一個」合法動作,因此機器對任何輸入的行為都是單一、完全確定、沒有分支的運行。沒有複製、沒有「逐一嘗試」——就只有一條路徑,像一份沒有決策點的食譜。這是實務上的主力,因為一台「下一步唯一」的機器,正是電腦能真正一步步執行的機器。

這裡的確定性需要兩個小心的條件。第一,對任意狀態、輸入符號與堆疊頂端符號,δ 至多給出一個動作——一般轉移不得有歧義。第二,ε-移動不得與讀取移動競爭:若某個格局中有 ε-移動可用,則該處不得同時有讀取輸入的移動可用,否則機器就面臨選擇。兩者合起來保證從任一瞬間描述出發,它能產生的 ID 永遠不超過一個。DPDA 通常以終止狀態接受,因為對確定型機器而言以空堆疊接受有技術上的彆扭(它只能接受無前綴語言)。

深刻而令人驚訝的事實是這項限制的代價。對有限自動機,確定性是免費的——每個 NFA 都有等價的 DFA。對下推自動機,確定性「並非」免費:確定型 PDA 辨識的語言嚴格地少於非確定型。它能辨識的語言稱為確定型上下文無關語言,是所有上下文無關語言的一個真子集。這正是真實編譯器在意的原因:DPDA 可有效且無歧義地執行,所以語言設計者刻意讓自己的文法保持在確定型類別之內。

a^n b^n「是」確定型的:讀 a 時推入,遇到第一個 b 就切換為彈出,無需猜測——輸入本身就標示出中點。所以 DPDA 能辨識 a^n b^n,但沒有任何 DPDA 能辨識偶數長度迴文。

每個格局至多一個動作;DPDA 辨識上下文無關語言的一個嚴格子集。

別以為 DPDA 等於 PDA、像 DFA 等於 NFA 那樣——它們「不」相等。一般而言無法把 PDA 確定化;確定型類別嚴格地較小。

又称
DPDAdeterministic PDA確定型 PDA決定性下推自動機