簡體   English   中英

所有奇數長度單詞和偶數長度非回文的語言的pda

[英]Pda for the language of all odd-length words and even-length non-palindromes

我想要這種語言的掌上電腦

L = (a|b)* - {wwR: W 在 {a,b}*}

我們的策略如下:

  1. {a, b} 上所有奇數長度單詞的語言顯然是規則的,因此也是上下文無關的; 一個掌上電腦很簡單
  2. 所有偶數長度的非回文的語言也是上下文無關的,盡管我們需要證明這一點
  3. 上下文無關語言的聯合總是上下文無關的,所以如果我們能找到一種方法為上述語言制作 PDA,我們絕對可以為他們的聯合制作一個

所有奇數長度字符串的語言的 PDA 有兩個狀態並且不使用堆棧; 它在 a 或 b 上從最初的非接受 state 移動到接受 state,然后在后續的 a 或 b 上回到最初的 state。

偶數長度非回文語言的PDA可以通過修改{a,b}上偶數長度回文的PDA得到。 考慮這個用於偶數長度回文的簡單 PDA:

q    S   s    q'    S'
q0   x   a    q0    ax
q0   x   b    q0    bx
q0   x   -    q1    x
q1   a   a    q1    -
q1   b   b    q1    -
q1   Z   -    q2    Z

讀取這些產生式的方法是這樣的:從 state q 開始,堆棧頂部有符號 S(其中 x 是任何符號的簡寫),移動到輸入 s 上的 state q'(或空/epsilon-/lambda 轉換)在 -) 的情況下並用 S' 更新最頂層的堆棧符號(或者在 - 的情況下將其刪除)。

這保證了無論我們從堆棧中讀取 a 和 b 的什么字符串,如果我們要到達 state q2(接受狀態),我們必須將其向后彈出。

現在,偶數長度的非回文在某些時候根本無法通過此測試。 因此,我們可以讓 q2 不接受,添加一個新的 state q3,並在檢測到不匹配時允許 state q2 到 go 到 q3。 然后,我們需要做的就是在 q3 中確認它確實是一個不匹配(通過每次我們從輸入中消耗一個符號時從堆棧中彈出一個符號)然后我們將在 q3 中接受一個空堆棧。

q    S   s    q'    S'
q0   x   a    q0    ax
q0   x   b    q0    bx
q0   x   -    q1    x
q1   a   a    q1    -
q1   b   b    q1    -
q1   a   b    q3    -
q1   b   a    q3    -
q1   Z   -    q2    Z
q3   a   x    q3    -
q3   b   x    q3    -

以空堆棧結束 q3 的唯一方法應該是你正在查看一個偶數長度的非回文。 偶數長度來自壓入 n 個符號然后彈出 n 個符號,並且不是回文是通過從 q1 到 q3 的轉換以及 q3 然后清空堆棧並以相同速率消耗剩余輸入這一事實來保證的。

編輯:忘記描述如何制作組合式 PDA

要制作組合的 PDA,請使用上面為偶數長度非回文導出的一個,以及為奇數長度單詞使用的這個:

q    S    s    q'    S'
q5   x    y    q6    x
q6   x    y    q5    x

這里,x 和 y 是通配符,q6 是接受。

然后,只需制作一個非確定性 PDA,它首先分支到一個或另一個:

q    S   s    q'    S'
q7   Z   -    q5    Z
q7   Z   -    q6    Z

現在,q7 將是組合 PDA 的初始 state,如果堆棧為空且輸入已耗盡,則 PDA 將接受狀態 q3 或 q6。

暫無
暫無

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

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