Проблема регулярного выражения - PullRequest
6 голосов
/ 09 марта 2010

Какое регулярное выражение для языка 0 m 1 n , где m + n четное?

Ответы [ 2 ]

14 голосов
/ 09 марта 2010

Если вы имеете в виду строку 000...111..., где длина строки четная, вы можете использовать ^(00)*(01)?(11)*$

1 голос
/ 09 марта 2010

Хорошо, так что вам нужно рассмотреть для нуля случаи, когда есть нечетные и когда они четные. Это требует двух состояний, одно для четных нулей, одно для нечетных нулей. Тогда для случая нечетного нуля вам нужно иметь 1 единицу, а затем четное число единиц. Для четного случая вам просто нужно четное число единиц.

Легко написать DFA, но я не знаю, как его здесь нарисовать, поэтому я рискну угадать регулярное выражение:

(0 (00)* 1 (11)*) \/ (00)*(11)*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...