簡體   English   中英

PDA {a^nb^m | n<=m<=2n}

[英]PDA for {a^n b^m | n<=m<=2n}

有人可以幫我為{a^nb^m | 設計PDA嗎? n<=m<=2n}。 你能設計一個解釋一下嗎?

這里的想法是:讀取每個 a 並將一個符號壓入堆棧。 然后,當您開始讀取 b 時,在每一步中,不確定地選擇是讀取單個 b 並彈出一個堆棧符號,還是讀取兩個 b 並彈出一個堆棧符號。 然后,如果輸入已用完且堆棧為空,則使 PDA 接受。

  • 如果您總是選擇為每個 b 讀取彈出一個堆棧符號,那么您會得到 m = n
  • 如果你總是選擇為每一對 b 讀取彈出一個堆棧符號,那么你得到 m = 2n
  • 如果您有時選擇讀取一個 b 有時選擇讀取兩個,那么您最終會得到 n < m < 2n; n < m 因為有時您讀取的 b 比堆棧符號多, m < 2n 因為有時您只讀取一個 b 並從堆棧中彈出

如果至少一條路徑最終接受,則 NPDA 接受; 因此,只要某種猜測模式為每個堆棧符號讀取一個或兩個 b 得到正確的 m 值,就可以接受該字符串。 應該清楚的是,對於任何 m 值,使得 n <= m <= 2n,線性系統有一個解:

x + 2y = m
x + y = n

這里,x 是 NPDA 應該猜測它讀取一個 b 的次數,y 是 NPDA 應該猜測它讀取兩個 b 的次數。 我們可以從第一個中減去第二個:

y = m - n

因為 y 必須是非負數,所以我們得到第一個條件,n <= m。 將其代入第二個起源方程給出:

    x + m - n = n
<=> x = 2n - m

同樣,因為 x 必須是非負數,這給出了我們的第二個條件,m <= 2n。

不確定地,在每次讀取a a 時將一個或兩個a推入堆棧,然后將傳入的b與推入a匹配。

暫無
暫無

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

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