![](/img/trans.png)
[英]What would be the PDA (pushdown automata) of the language a^mb^n where n<m
[英]Create a pushdown automata for the following language
因此,我在書中遇到練習問題,發現了這個問題。 構造一個在sigma(a,b,c)上接受語言L的npda。
L = {w:a的數量= b + 1的數量}
所以我正在解釋它,因為它接受的所有字符串再加上一個a和一個字母b。 我認為所有州都應該有一個具有過渡的循環(c,landa,landa),因為我們並不真正在乎c。 之后,我真的很困惑,因為要覆蓋的情況太多,因為a和b的放置是任意的。 解決這個問題的方法是什么? 謝謝!!
PDA可以使用堆棧來記住任意數量的信息。 這使得PDA比有限自動機具有無限的功能。 確定PDA的關鍵是弄清楚如何使用堆棧,然后圍繞它構建PDA。
我們如何使用堆棧來確保a
的數量等於b
的數量加1? 好了,堆棧可以輕松地跟蹤已經看到的符號的運行平衡。 例如,如果我們看到四個a
s和兩個b
s,則我們的堆棧可以通過包含aaZ
來表示這一事實,其中Z
是“堆棧底部”符號。 當然,我們可能會使用其他方法和其他表示形式,但這對於此類問題特別整潔。 要完全解釋該表示形式:
Z
,只是堆棧符號的底部。 a
,而堆棧頂部是a
或Z
,則添加另一個a
。 a
且堆棧的頂部是b
,則刪除一個b
。 b
並且堆棧的頂部是b
或Z
,則添加另一個b
。 b
,而堆棧的頂部是a
,則刪除a
。 c
,則不理會堆棧。 如果我們對所有輸入一遍又一遍地執行此操作,則堆棧的內容將等於x^m
,其中x
是a
而b
出現的頻率更高,並且m
是該n的差的絕對值每個符號的編號。
要接受您的語言,您必須簡單地識別輸入已用盡且堆棧組成等於aZ
。 這可以通過添加一些狀態和lambda / epsilon轉換來清除堆棧和/或進入接受狀態來完成。
感謝Peter Leupold指出,原始答案的其余部分都使語法錯誤。 我嘗試修復它,不喜歡答案能得到多長時間,因此我省略了它。 我將簡單地補充說,另一種可能性是為一種語言生成CFG,並使用一種算法為其衍生PDA。 在這種情況下,對我來說,直接給PDA少了很多麻煩。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.