2010-09-20 2 views
4

У меня есть простой вопрос о поиске регулярного выражения для данного языка.Поиск регулярного выражения

Я даюсь язык L где:

L = {ш ∈ {0, 1} *: ж имеет ровно одну пару последовательных нулей}

Моей первой попыткой было попробовать L ((0 + 1) * 00 (0 + 1) *), но я заметил, что проблема с этим связана с тем, где я h ave (0 + 1) *, потому что, если выбрано 0, оно может быть более нулевым из них, что приводит к более чем одной паре последовательных нулей.

Я также знаю, что возможные случаи у меня есть, два нуля спереди, посередине и в конце. Я просто не совсем уверен, как создать для этого регулярное выражение.

Любая помощь очень ценится.

ответ

6

Попробуйте следующее:

1 * (011 *) * 00 (11 * 0) * 1 *

Объяснение:

  • 1 *: любое количество ведущих 1-х
  • (011 *) *: если есть 0 до 00, за ним не должно следовать другое 0, поэтому допускается только одно или несколько 1; этот рисунок может быть повторен любое число раз
  • : два 0 '
  • (11 * 0) *: если есть 0 после 00, оно не должно предшествовать другому 0, таким образом, только один или несколько 1; эта модель может повторяться любое число раз
  • 1 *: любое количество завершающих 1-х
+0

спасибо. Объяснение очень помогло. – Seephor

+0

11 * лучше писать как 1+ – brianary

+0

@brianary: В этом случае «+» является оператором чередования. Таким образом, «0 + 1» является либо «0», либо «1». – Gumbo

1

я считаю, что было бы, как этот

((1*)(01)*))* 00 ((11*)0)*1* 
0

Последовательность:

  • Все, кроме 00, заканчивая 1
  • Ничего, кроме 00, начиная с 1
1

Лучший возможный ответ для этой задачи (1 + 01) * 00 (1 + 10) *

-1

Try расщепление проблема в 2 меньшие проблемы, как это:

первого случай: нет 00 последовательности -> RE: (01 + 1) * (0 + е)
второго случая: одна последовательности 00 -> RE: (01 + 1) * 00 (1 + 01) *

Окончательный RE для хотя бы одной последовательности 00 будет: (01 + 1) * 00 (1 + 01) * + (01 + 1) * (0 + e) ​​ , e - пустая строка.

Смежные вопросы