RE: строка нечетной длины над {0, 1}, содержащая ровно два 0 [закрыто]


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

Вопрос в следующем: напишите регулярное выражение для следующего языка над {0, 1}, которое представляет собой набор всех строк нечетной длины, содержащих ровно два 0s.

Я закончил первую часть (нечетную часть), она должна быть:

(0+1)[(0+1)(0+1)]* ( + это то же самое, что | (или) я полагаю, мы узнали это как +)

Однако, когда я думаю о том, что у меня есть ровно два 0s, это становится действительно запутанным. Я вижу только, что могу использовать * с 1 только потому, что # из 0s ограничены 2. Но если я делаю (11)*, я не могу получить перестановку 0s внутри 1 s. (например, не могу получить 10101 с (11)*).

Что я знаю:

  1. только 1s может использовать *
  2. в регулярном выражении будут использоваться только два 0s
  3. способ сделать нечетную длину-это добавить нечетное число. length to an even length (четная длина должна иметь пустую строку внутри набора)
  4. нечетная длина не должна использовать *, так как 2 нечетных = четных, поэтому только четная длина может использовать *.

Для возможных подсказок или ответа, пожалуйста, используйте 0, 1, +/|, *, (, ) только... Некоторые другие выражения я не смогу понять.

1 2

1 ответ:

Регулярный язык над {0, 1}, который представляет собой набор всех строк нечетной длины, содержащих ровно два 0.

Что означает этот язык?

Примечание языковая строка может состоять из двух 0 и любое количество 1 таким образом, общая длина строки нечетна. Других ограничений нет. 1 и еще 0 Ан появляются в любом порядке причем в любом узоре.

Как мы знаем,even + odd = odd. Таким образом, в строке есть как минимум три длины и нечетное число 1 потому что количество 0 в строке-два.

Поэтому регулярное выражение должно быть примерно таким: A 0 B 0 C , где A, B, C-подстроки, состоящие только из 1 и общее количество 1 в A, B, C нечетно, следовательно, все не может быть ^ (nul) в выражении.

Теперь, поскольку общее число 1 в A, B, C = нечетно, поэтому это может быть что-то вроде: либо(1) two even and one odd, либо (2) all three are odd.

Примечание: строка нечетной длины не может быть null.

Регулярное Выражение:

1(11)*01(11)*01(11)* + 1(11)*0(11)*0(11)* + (11)*01(11)*0(11)* + (11)*0(11)*01(11)*
// all odd             A odd, B C even       B odd, A C even     A B even, C odd