Wenn Sie eine Zahl von drei teilen, Es gibt nur drei mögliche Reste (0, 1 und 2). Was Sie anstreben, ist sicherzustellen, dass der Rest 0 ist, also ein Vielfaches von Drei.
Dies kann durch einen Automaten mit drei Zuständen durchgeführt werden:
- ST0, mehr von 3 (0, 3, 6, 9, ....).
- ST1, mehrere von 3 plus 1 (1, 4, 7, 10, ...).
- ST2, mehrere von 3 plus 2 (2, 5, 8, 11, ...).
denken jetzt von jede nicht-negativen Zahl (das ist unsere Domäne) und multipliziert es mit zwei (bis zum Ende einer binäre Null tack). Die Übergänge für die sind:
ST0 -> ST0 (3n * 2 = 3 * 2n, still a multiple of three).
ST1 -> ST2 ((3n+1) * 2 = 3*2n + 2, a multiple of three, plus 2).
ST2 -> ST1 ((3n+2) * 2 = 3*2n + 4 = 3*(2n+1) + 1, a multiple of three, plus 1).
denken auch an beliebigen nicht negative Zahl, multipliziert es mit zwei dann fügen eine (auf das Ende, das eine binäre Eins Tack). Die Übergänge dafür sind:
ST0 -> ST1 (3n * 2 + 1 = 3*2n + 1, a multiple of three, plus 1).
ST1 -> ST0 ((3n+1) * 2 + 1 = 3*2n + 2 + 1 = 3*(2n+1), a multiple of three).
ST2 -> ST2 ((3n+2) * 2 + 1 = 3*2n + 4 + 1 = 3*(2n+1) + 2, a multiple of three, plus 2).
Diese Idee ist, dass Sie am Ende in Staat ST0 beenden müssen. Da jedoch eine beliebige Anzahl von Unterausdrücken (und Unterunterausdrücken) vorhanden sein kann, eignet sie sich nicht leicht für die Reduktion auf einen regulären Ausdruck.
Was Sie tun müssen, ist für jede der Übergangssequenzen zu erlauben, die von ST0 bekommen können dann ST0 sie nur wiederholen:
Diese laufen auf den beiden RE Sequenzen:
ST0 --> ST0 : 0+
[0]
ST0 --> ST1 (--> ST2 (--> ST2)* --> ST1)* --> ST0: 1(01*0)*1
[1] ([0] ([1] )* [0] )* [1]
oder die Regex:
Dies erfasst die Vielfachen von drei, oder zumindest die ersten zehn, die ich getestet habe.Du kannst so viele ausprobieren, wie du willst, sie werden alle funktionieren, das ist die Schönheit der mathematischen Analyse und nicht der anekdotische Beweis.
Ist das Ihr Rechen Theorie Hausaufgaben? – BobbyShaftoe
vielleicht könnten Sie einen Hintergrund angeben, was Sie tun möchten und welche Sprache Sie verwenden möchten. –
ein Teil davon. Ich denke, ich habe die richtige NFA aber kann nicht die mittleren Schritte zu beseitigen, wie es ziemlich kompliziert ist. – Jaelebi