簡體   English   中英

我如何按照這個規則構建這個下推自動機

[英]How do I construct this pushdown automata following this rules

規則是:不能以字母a開頭。 它不能以字母 b 結尾。 它必須包含 b=ia=2i。 字母表是a,b。 我試過這樣做清空堆棧。 但不幸的是,我無法達到它。 像這樣的輸入例如: bbaaaa 沒問題,因為對於每個 b 輸入,我都將其放入堆棧 2 a 並且 a 輸入會刪除堆棧。 但是當輸入是這樣的時候:baaabbaaa can't follow that steps。 有什么建議嗎?

我的方法是這樣的:

使初始 state 接受(因為空字符串滿足語言標准),並在 b 上單次轉換到另一個 state。 作為此轉換的一部分,將兩個 b 壓入堆棧。 如果 PDA 在初始 state 中看到 a,它將崩潰並拒絕。

我們已經過渡到的另一個 state 對應於剛剛看到的 b。 因為我們的字符串不能以 b 結尾,所以這個 state 不能被接受。 如果我們在這里看到另一個 b,我們可以循環回到這個 state 並每次向堆棧添加兩個 b(如果堆棧頂部有 b)或者取消兩個 a(如果有兩個 a)或替換 a與 b (如果堆棧只有一個 a)。 如果我們看到一個 a,我們必須從 go 到一個新的 state,我們應該從堆棧中彈出 ab(如果有 b)或壓入另一個 a(如果 a 在頂部)。

第三個 state 意味着我們最后看到了一個 a,所以如果我們在這里用空堆棧用完輸入,我們應該接受。 如果我們看到 a,我們可以留下並彈出 b(如果 b 在頂部)或 push a(如果 a 在頂部)。 如果我們看到 b,我們應該返回到第二個 state 並推送兩個 b,彈出兩個 a,或彈出 a 並推送 b,具體取決於堆棧內容。

我們的堆棧跟蹤 PDA 必須看到以清除堆棧的附加符號的數量,如下所示:

  • 堆棧一次只能包含 a 或 b,永遠不會同時包含
  • 如果我們已經看到 na 和 mb 並且 n = 2m,則堆棧將為空
  • 如果我們已經看到 na 和 mb 並且 n > 2m,堆棧中將有 n - 2m a
  • 如果我們看到 na 和 mb 並且 n < 2m,堆棧中將有 2m - nb

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM