[英]Clarification regarding PDA for L = {a^nb^(2n) | n>=1}
該解決方案說,對於您閱讀的每個 'a',將 2 個 a's push 到 stack 中。 最后,當你遇到 'b' 時,彈出一個 'a'。 但這不會將輸出作為 a^nb^n 嗎? 例如: Input = aabbbb 在讀取 a's 時,堆棧將有四個 4 a's ,因此對於遇到的每個 'b' 彈出一個 'a' ,你不會得到 aaaabbbb 嗎?
這些a
不同的。 一個來自輸入,另一個來自堆棧。 它們可能在您的文檔中使用不同的字體。 下推自動機有一個堆棧。 在此堆棧(后進先出:LIFO)中,它會記住用於指導如何接受輸入的信息: Wikipedia 。
思路如下:
a
將兩個t
推入堆棧並移動到下一個字符b
,必須從堆棧中彈出一個t
。b
a
並且至少需要一個輸入字符這里堆棧用於remember
要彈出多少b
:是a
的兩倍。
由給定語言生成的字符串是:
L={abb,aabbbb,aaabbbbbb,….}
這里 a 后面是 b 的兩倍
每當 'a' 出現時,將任何字符推入棧中,讓 't' 兩次,如果 'a' 再次出現,則重復相同的過程。
當'b' 出現時,每次從堆棧中彈出一個't'。
最后在字符串的末尾,如果堆棧中沒有任何內容,那么我們可以聲明該語言在 PDA 中被接受。
該問題的PDA如下:
轉換函數為:
δ(q0, a, Z) = (q0,ttZ)
δ(q0, a, t) = (q0,ttt)
δ(q0, b, t) = (q1,ε)
δ(q1, b, t) = (q1,ε)
δ(q1, ε, Z) = (qf,Z)
解釋:
第 1 步:考慮滿足給定條件的字符串:“aabbbb”。
第 2 步:對於輸入 'a' 和 STACK 字母 Z,將兩個 t 壓入堆棧。
第 3 步:對於輸入 'a' 和堆棧字母 't',再次將兩個 t 壓入堆棧。 將兩個 't' 推入堆棧: (a,t/ttt) 並且狀態將為 q0。 現在堆棧有“tttt”。
第 4 步:對於輸入“b”和堆棧字母“t”,然后從堆棧中彈出一個“t”:(b,t/ε),狀態將為 q1。
第 5 步:對於輸入 'b' 和堆棧字母 't' 和狀態 q1,然后從堆棧中彈出一個 't':(b,t/ε) 並且狀態將保持 q1
第6步:對於輸入'b'和堆棧字母't',然后從堆棧中彈出一個't':(b,t/ε),狀態將為q1
第 7 步:對於輸入 'b' 和堆棧字母 't' 和狀態 q1,然后從堆棧中彈出一個 't':(b,t/ε) 並且狀態將保持 q1
第 8 步:我們到達字符串的末尾,輸入 ε 和 STACK 字母 Z,
進入最終狀態(qf):(ε,Z/Z)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.