Побудуйте КПК для доповнення


16

Я цікаво , якщо це взагалі можливо, так як {anbncnn0}CFL . Тому PDA, який може відрізнити слово w{anbncnn0} від решти {abc} може також прийняти його, що мені звучить суперечливо.

Я думаю, мені потрібно скористатися недетермінованим характером КПК, але я не в ідеях. Якщо ви можете запропонувати поради, я дуже вдячний.


Цікавий момент про це здається суперечливим. Дійсно, безконтекстні мови не закриваються під час прийняття доповнення ... тому існує безліч прикладів безконтекстних мов, які можна було б "прийняти" у тому сенсі, який ви натякаєте. Я не теоретик і, як такий, не можу реально погодитися з цим, але, можливо, хтось інший може задзвонити, чому це не про що турбуватися?
Patrick87

Зауважимо, що це узагальнює: доповненням є CFG. {anbncndnen}
sdcvvc

Відповіді:


15

Ні, це без контексту. Щоб прийняти , вам потрібно переконатися, що три числа рівні. Для того, щоб прийняти на * б * гр *а н б н гр н , вам просто потрібно , щоб переконатися , що ви перебуваєте в одному з наступних трьох випадків:anbncnabcanbncn

  1. Кількість s відрізняється від кількості b s; абоab
  2. Кількість s відрізняється від кількості c s; абоac
  3. Кількість s відрізняється від кількості c s.bc

Напишіть КПК для кожного з цих випадків, а потім поєднайте їх, не стримуючи перехід до кожного з початкового стану.


Я записав ці справи добре, але мені не вистачало ідеї їх з'єднати. Дякую!
hauptbenutzer

4
Насправді вам потрібні лише будь-які два випадки.
sdcvvc

@sdcvvc Добре. :)
Patrick87

Для різної кількості символів розгляньте це як натхнення: . Вона повинна бути простою , щоб клей або + на лівій це або з + на правій і перетворити це в КПК. Для хитрого випадку (який вам не потрібен) S a S c | A a A ; C B c |SxSy|X|Y;Xx|xX;Yy|yYa+c+ . SaSc|A|C;AaB|aA;CBc|Cc;Bε|bB
Jonas Kölker
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.