Вопрос кпк> нужна помощь - PullRequest
0 голосов
/ 25 марта 2011

У меня есть задача создать КПК, который распознает язык A = {a ^ mb ^ n |m> n} с помощью ∑ = {a, b} .. я немного запутался, как это сделать .. вы, ребята, можете помочь мне решить этот вопрос?спасибо

Ответы [ 2 ]

0 голосов
/ 16 мая 2015

Давайте не будем сразу переходить к разработке КПК для этой проблемы, а попробуем сначала понять вопрос.

Какие несколько возможных строк могут быть сгенерированы на данном языке.
Ну, можетбыть бесконечной такой строкой, например -

  1. aab
  2. aaab
  3. aaa ... b
  4. aaaa..bb

Идея состоит в том, чтобы убедиться, что число a всегда больше, чем число b, или мы можем сказать, что число b в строке никогда не должно превышать количество a в строке, которая будет принята КПК.

Итак, теперь у нас есть вопрос.

Как убедиться, что число a больше, чем число b

Для строки, если мы начнем отменить a для каждого 'b' в строке
Нам останется следующий вывод

  1. Число a было равно количеству b - После отмены ничего не осталось
  2. Количество b было больше чем numчисло а - у нас осталось несколько б после отмены
  3. число а было больше числа б - у нас осталось несколько а после отмены

Если мы попытаемся установить связь между «Вопросом» и указанными выше точками, мы увидим, что строки, принадлежащие вышеуказанной точке № 3, являются строками, приемлемыми для КПК.

Теперь давайте определим наш КПКследующим образом

P = ({q0, q1, qf}, {a, b}, δ, {a, b, Z0}, q0, Z0, {qf})

Функция перехода (δ):

δ(q0, a, Z0) = (q0,aZ0)  
δ(q0, a, a) = (q0, aa)  
δ(q0, b, a) = (q1, Λ)  
δ(q1, b, a) = (q1, Λ) 
δ(q1, Λ, a) = (qf, Z0) 
δ(q1, b, Z0) = (q2, Z0)  
δ(q1, Λ, Z0) = (q2, Z0)

Объяснение:

  1. Первоначально мы храним a в стеке (состояние q0)
  2. Когда первыйb встречается, мы извлекаем a из стека и меняем состояние на q1
  3. Мы продолжаем извлекать a из стека
  4. Если не осталось b для извлечения a из стека, мы меняем состояние на qf науказать строку принятия. (ТОЧКА № 3)
  5. Если осталось немного b, но нет a, чтобы выскочить из стека, мы меняем состояние с q1 на q2 (Trap). (ТОЧКА № 2)
  6. Если ни a не осталось в стеке, чтобы выскочить, либо b не осталось во входной строке, мы снова изменим состояние с q1 на q2 (Trap). (ТОЧКА № 1)
0 голосов
/ 26 марта 2011

Посмотрите на этот пример на странице Википедии для автоматов: это для языка {0 n 1 n | n ≥ 0}, то есть некоторое количество нулей, за которыми следует такое же количество единиц.Это не совсем то же самое, что ваша задача, но похоже.Можете ли вы понять описание, основанное на вашем материале курса?Как бы вы изменили его, чтобы он распознал нужный вам язык?

...