2016-10-05 4 views
1

Ich musste vor kurzem den regulären Ausdruck für die Sprache herausfinden {w | | w | ist ungerade und w beginnt und endet mit dem Symbol b} über dem Alphabet {a, b}.Vereinfachen Regulärer Ausdruck, Automatentheorie

dachte ich

b(ab+bb+aaab+aabb+abab+abbb+bbbb+bbab+babb+baab)* 

Die Lösung wird sehr lang ist, um eine Lösung aus, so mir, ich hatte gehofft, jemand könnte einen Weg sagen, dies vereinfacht werden kann,

+0

Ihre "Lösung" ist falsch. Fängt 'baa' ab, das nicht in deiner Sprache ist. Wie auch immer, wenn du noch mehr Regexes finden musst, kannst du mich im Kommentar anrufen. Ich werde glücklich sein zu helfen. – xenteros

+0

Danke, das war eigentlich ein Tippfehler. Es sollte "bb" sein. –

+0

Wie auch immer, upvote die richtige Antwort, nur um fair zu sein. – xenteros

Antwort

3

Sie b|(b(a|b)((a|b)(a|b))*b) Die Sprache versuchen könnten Sie beschreiben kann nur b erzeugen, und das wird vom ersten Zweig erfasst, und dies ist die einzige Größe 1, die es erzeugen kann. Dann kann es Größe 3,5,7, ... Saiten produzieren. Diese werden vom zweiten Zweig erfasst. Die b am Anfang und Ende sind selbsterklärend. Und das sind 2 Zeichen. Das mittlere Bit ist die klassische Sprache {w | |w| is odd} über {a,b}.

Eine leistungsfähigere Syntax würde etwas wie b((a|b)((a|b)^2)*b)? erlauben, das kompakter, aber gleichwertig ist.

+0

Danke, gute Erklärung. –

0

Die einfachste:

(b(a|b)(aa|ab|ba|bb)*b)|b