Создайте NPDA для языка

Постройте NPDA для языка: L = {w: w∈ {a, b} ^ *, количество a не меньше количества b}


person Fulla    schedule 25.06.2019    source источник


Ответы (1)


Наша стратегия может быть такой:

  • введите a, стек a / Z: нажмите a
  • ввод a, стек b: pop
  • вход b, стек a: pop
  • вход b, стек b / Z: нажмите b
  • принять, если нет дополнительного ввода и сложить a / Z

Почему это работает? Если у нас больше a, чем b, мы получаем a в стеке. Если числа a и b совпадают, мы получаем Z в стеке. Если b больше, чем a, в стеке остается b. Таким образом, мы принимаем либо a, либо Z сверху, когда ввод исчерпан.

q    e    s    q'   s'
q0   a    Z    q0   aZ
q0   a    a    q0   aa
q0   a    b    q0   -
q0   b    Z    q0   bZ
q0   b    a    q0   -
q0   b    b    q0   bb
q0   -    a    q1   a
q0   -    Z    q1   Z
q1   -    a    q1   -

Этот КПК заканчивается на q1 с пустым стеком, если во входной строке не меньше a, чем b.

person Patrick87    schedule 26.06.2019