簡體   English   中英

關於 L = {a^nb^(2n) | PDA 的說明 n>=1}

[英]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.

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