Discussion:
Endliche Automaten, systematisch angehen..
(zu alt für eine Antwort)
Hero Wunders
2004-08-19 23:00:11 UTC
Permalink
Hallo!

Ich bin in der 13. Klasse und wir haben heute im Informatikunterricht
mit Endlichen Automaten angefangen.
Als Hausaufgabe:
Konstruiere einen Automaten, der anhand einer Zahl im Binärsystem
entscheidet, ob diese ohne Rest durch 3 teilbar ist.
Vom Lehrer haben wir noch den Tip bekommen, dass wir mindestens drei
Zustände einplanen müssen.

So, nun dachte ich mir, dass ich versuche Muster von allen durch 3
teilbaren Zahlen im Binärsystem zu finden und diese dann irgendwie in
einem Automaten umzusetzen.

Leider habe ich nur "2-stellige" Muster gefunden (obwohl der Automat Bit
für Bit bearbeitet).

Die Muster waren:
Wenn ich die letzten zwei Bits als eigene Zahl betrachte, wird diese
immer weiter runtergezählt (00, 11, 10, 01, 00, 11 ...).
Bei nächsten 2er Gruppe (von rechts) wird's schon hakeliger.
Hier wiederholt sich die Zahl einmal, dann wird zweimal 1 hochgezählt,
dann wiiederholt sich die Zahl wieder einmal.
Die nächste Gruppe hat wieder ein komplett anderes Muster (ich konnte
also die Muster der einzelnen Gruppen nicht noch weiter abstrahieren, so
dass ich vorraussagen könnte, was für ein Muster z.B. in Gruppe 4
auftaucht).

Hmm. Dann ist mir noch was aufgefallen:
Die Quersumme der einzelnen 2er Gruppen (wieder als einzelne Zahlen
gesehen) ergibt auch immer wieder eine durch 3 teilbare Zahl (im
Binärsystem notiert).
Daher muss (Gruppen durch ' getrennt) 01'01'01 oder 10'11'11'01 durch 3
teilbar sein.

Leider konnte ich das nicht so recht in einem Automaten "verwurschteln".
Man kann es auch so sehen: Es lassen sich immer 2er Gruppen so addieren
(entweder 01+01+01, 10+01 oder 01+10, an irgendeiner geraden Stelle der
Zahl), dass am Ende nur noch 11er und/oder 00er Gruppen da stehen.

Hmm, auch da bin ich nicht weitergekommen.
Ok...

Dann habe ich einfach mal angefangen weiterzudenken:
Beliebig viele Nullen am Anfang dürfen nichts ausmachen.
=> Z1 wechselt nicht bei 0
=> Z1 wechselt bei 1 zu Z2
Nun habe ich einfach ein Beispiel genommen, die 3 also 11
Wenn Z1 bei 1 wechselt und 11 schon zum Endpunkt führen, muss der mir
dann angibt, ob es sich um eine durch drei teilbare Zahl handelt (und
ich mir einfach ausgesucht habe, dass dieser Punkt wieder Z1 ist), muss
also Z2 bei 1 als Eingabe wieder zu Z1 gehen.

Also schonmal so:

0
,.
|| 1
+--+ ---> +--+
|Z1| |Z2|
+--+ <--- +--+
1

Nun könnte Z2 bei 0 nicht wechseln, was aber nicht mit dem Tip vom
Lehrer übereinstimmt, da dann hier Ende wäre.
Also muss bei 0 zu Z3 gewechselt werden.

0
,.
|| 1 0
+--+ ---> +--+ ---> +--+
|Z1| |Z2| |Z3|
+--+ <--- +--+ +--+
1

Jetzt kommt noch das Verhalten von Z3 ins Spiel.
Wenn ich annehme, dass wir zu Z3 durch die Eingabe 1,0 gekommen sind,
dann können meiner Theorie nach nun folgende Möglichkeiten eintreten:
1. Es gibt eine beliebig große Anzahl von 00er Gruppen, danach eine 01.
2. Es gibt eine beliebig große Anzahl von 11er Gruppen, danach eine 01.
Die einzige Möglichkeit 1 zu lösen und dabei wieder aus der Schleife
durch ein 01 herauszukommen besteht wohl darin, diese zwischen Z2 und Z3
laufen zu lassen.
Daraus folgt dann automatisch, dass Z3 bei 1 nichts tut.
Also:
0 1
,. ,.
|| 1 0 ||
+--+ ---> +--+ ---> +--+
|Z1| |Z2| |Z3|
+--+ <--- +--+ <--- +--+
1 0

Fertig.
Ist diese Argumentation dicht?
Ich schätze nicht, da ich nicht mit Sicherheit sagen kann, dass noch
andere Zahlen die genannten Eigenschaften haben.

Daher frage ich euch:
1. Wie geht man richtig systematisch so ein Problem an?
2. Woher weiß man wieviele Zustände eine solche Maschine mindestens und
höchstens haben muss (das ist wahrscheinlich ein besonders schwieriges
Gebiet)?

Ich bedanke mich schonmal bei euch für eure Hilfe!
Hero Wunders
Christian Volk
2004-08-19 23:26:35 UTC
Permalink
Post by Hero Wunders
Hallo!
Ich bin in der 13. Klasse und wir haben heute im
Informatikunterricht mit Endlichen Automaten angefangen.
Konstruiere einen Automaten, der anhand einer Zahl im Binärsystem
entscheidet, ob diese ohne Rest durch 3 teilbar ist.
Vom Lehrer haben wir noch den Tip bekommen, dass wir mindestens drei
Zustände einplanen müssen.
So, nun dachte ich mir, dass ich versuche Muster von allen durch 3
teilbaren Zahlen im Binärsystem zu finden und diese dann irgendwie
in einem Automaten umzusetzen.
Leider habe ich nur "2-stellige" Muster gefunden (obwohl der
Automat Bit für Bit bearbeitet).
Ist auch im Prinzip der Schlüssel.


Kennst du die 11er-Regel im 10er-System?
Eine Zahl ist durch 11 teilbar, zB 121, wenn ihre alternierende
Quersumme (1-2+1=0) durch 11 teilbar ist.

Grund: 11 = 10 + 1, also quasi immer 1 als Überschlagswert,
wenn man 11*10^k abzieht um die Zahl zu verkleinern.

Tschja, 3 = 2 + 1, also ist die die 3er-Regel im Binärsystem
auch die alternierende Quersumme.


Die normale Quersumme ists im 10er-System bei
der 3er und 9er-Regel halt, weil 9 = 10 - 1, also
kein Überschlagswert entsteht, sondern der Ziffernwert
runtergezogen werden kann und positiv aufsummiert wird.

Christian

Achja, allgemeines Verfahren zum Finden von Regeln:
zB Teilbarkeit durch 7.
Suche eine Zahl, die Nahe 10^j ist.
98 ist ganz gut, damit lässt sich eine Regel basteln.
Die braucht aber Verdopplung, da Abstand 2.
Noch besser ist 1001, die hat keine Verdopplung,
nur etwas mehr Stellen. Wenn du dann geeignet gruppierst
und (alternierende?) Quersummen bestimmst, hast
du eine 7er-Regel. Eine 13er gibts gleich mit dazu :o)
Michael Mueller
2004-08-20 00:03:36 UTC
Permalink
Post by Hero Wunders
Ich bin in der 13. Klasse und wir haben heute im Informatikunterricht
mit Endlichen Automaten angefangen.
Gut, dass endl. Autom. schon in der Schule besprochen werden!
Post by Hero Wunders
Konstruiere einen Automaten, der anhand einer Zahl im Binärsystem
entscheidet, ob diese ohne Rest durch 3 teilbar ist.
Vom Lehrer haben wir noch den Tip bekommen, dass wir mindestens drei
Zustände einplanen müssen.
3 Zustaende genuegen auch.

Tip: Modulo-Arithmetik.

In Worten: Du brauchst einen Zustand fuer jede Restklasse.
(Jede Zahl n kannst Du als 3k+a schreiben mit k >=0, 0 <= k <= 2
Dieses a bezeichnet die Restklasse.)
Die Restklasse 0 ist Start- und einziger Finalzustand.
Eine Binaerzahl wird von links nach rechts eingelesen.
D.h. wenn Du das naechste Bit einliest, wird die eingelesene
Zahl mit 2 multipliziert und dann das Bit addiert.

Was bedeutet dies fuer die Restklassen?

Annahme, Du bist in Restklasse 1, und liest nun eine 0 ein.
D.h. im aktuellen Zustand hast Du eine Zahl 3k+1 eingelesen.
Nun wechselst Du in den Zustand von (3k+1)*2 + 0.
Dies entspricht Restklasse 2.

Auf diese Art kannst Du alle Zustandsuebergaenge
konstruieren.

Viel Erfolg.

Michael Mueller
Michael Mueller
2004-08-20 00:05:18 UTC
Permalink
Post by Michael Mueller
(Jede Zahl n kannst Du als 3k+a schreiben mit k >=0, 0 <= k <= 2
^^^
An der Stelle habe ich mich vertippt.
Es muss a statt k heissen.
Post by Michael Mueller
Dieses a bezeichnet die Restklasse.)
Hero Wunders
2004-08-20 11:49:46 UTC
Permalink
Hallo!
Post by Michael Mueller
Post by Michael Mueller
(Jede Zahl n kannst Du als 3k+a schreiben mit k >=0, 0 <= k <= 2
^^^
An der Stelle habe ich mich vertippt.
Es muss a statt k heissen.
Post by Michael Mueller
Dieses a bezeichnet die Restklasse.)
Vielen Dank für deine Hilfe!
Daraus kann ich mir (hoffentlich zu Recht) auch gleich eine etwas
allgemeinere Herangehensweise ableiten:
Ich schaue wie sich eine Zahl hinsichtlich der Zielsetzung (also hier
die Frage danach, welchen Rest sie bei einer Teilung durch 3 lässt) bei
hinzufügen einer weiteren Stelle mit beliebigem Wert ändert.

Somit könnte man die Aufgabenstellung wohl so lösen:
Wenn eine weitere Stelle hinten angehängt wird, verdoppelt sich der Wert
und der Wert der angehängten Stelle wird addiert.

Verdoppelungen bewirken:
Rest 0 -> Rest 0 (0 -> 0, 3 -> 6)
Rest 1 -> Rest 2 (1 -> 2, 4 -> 8)
Rest 2 -> Rest 1 (2 -> 4, 5 -> 10)

Dann wird noch 0 oder 1 addiert (die neue Stelle).
Daraus folgen die Gesamtergebnisse:

+0 +1
Rest 0 -> Rest 0 Rest 0 -> Rest 1
Rest 1 -> Rest 2 Rest 1 -> Rest 0
Rest 2 -> Rest 1 Rest 2 -> Rest 2

(ist mir gerade erst beim Schreiben aufgefallen):
Und damit habe ich ja schon alle meine Verknüpfungen!

3 Zustände Z0, Z1 und Z2 für die Reste 0,1,2.

Wenn ich im Zustand Rest 0 bin, und es kommt eine 0 hinten dran, habe
ich also immer noch Rest 0. Wenn ich im Zustand Rest 1 bin und es kommt
eine 1 hinten dran, muss ich zu Rest 0 wechseln. (Das waren jetzt nur
zwei Beispiele herausgegriffen) Und so weiter und so fort.

Schreibweise:
Eingabe
Zustand vorher ---------> Zustand nacher

0 0 0
Z0 ---> Z0 Z1 ---> Z2 Z2 ---> Z1
1 1 1
Z0 ---> Z1 Z1 ---> Z0 Z2 ---> Z2

Das kann man dann natürlich auch in einem hübschen Schaubild darstellen.
Ich danke dir für den Anstoß (nagut, eigentlich war es ja schon fast die
ganze Lösung).
Ich war wohl zu Beginn noch etwas zu stark auf die "gesamte" Zahl fixiert.

Nochmals, Danke!
Hero Wanders
Hannes Petersen
2004-08-21 16:06:06 UTC
Permalink
Post by Hero Wunders
Vielen Dank für deine Hilfe!
Daraus kann ich mir (hoffentlich zu Recht) auch gleich eine etwas
[Erläuterung eines EA, der Binärzahlen auf ihre Restklassen untersucht]
Das kann man dann natürlich auch in einem hübschen Schaubild darstellen.
Ich danke dir für den Anstoß (nagut, eigentlich war es ja schon fast die
ganze Lösung).
Ok. Wenn du Lust hast, kannst du ja mal weiter verallgemeinern:

1. Was ändert sich am Automaten, wenn er keine Binärzahlen, sondern
Dezimalzahlen verarbeiten soll?

2. Der bisherige Automat liest die Zahlen von "vorne" nach "hinten"
(also von den höherwertigen Stellen hinunter bis zu den
geringwertigen). Kann man auch Automaten konstruieren, die von
"hinten" nach "vorne" arbeiten?

3. Wie sieht der Automat aus, der die Teilbarkeit durch vier erkennt?
(Sowohl der "Vorwärts"-Automat, wie auch der "Rückwärts"-Automat)

4. Wie viele Zustände braucht ein Automat, der die Teilbarkeit durch
fünf einer Binärzahl feststellen soll? Wie viele Zustände benötigt
sein Dezimaler Bruder? Warum?

/Hannes

Stefan Kirchner
2004-08-20 08:30:20 UTC
Permalink
Post by Hero Wunders
Hallo!
Ich bin in der 13. Klasse und wir haben heute im Informatikunterricht
mit Endlichen Automaten angefangen.
Konstruiere einen Automaten, der anhand einer Zahl im Binärsystem
entscheidet, ob diese ohne Rest durch 3 teilbar ist.
Vom Lehrer haben wir noch den Tip bekommen, dass wir mindestens drei
Zustände einplanen müssen.
So, nun dachte ich mir, dass ich versuche Muster von allen durch 3
teilbaren Zahlen im Binärsystem zu finden und diese dann irgendwie in
einem Automaten umzusetzen.
[1. Versuch]
Hmm, auch da bin ich nicht weitergekommen.
Ok...
[2. Versuch]
Fertig.
Ist diese Argumentation dicht?
Ich schätze nicht, da ich nicht mit Sicherheit sagen kann, dass noch
andere Zahlen die genannten Eigenschaften haben.
Richtig, Du hast gezeigt: wenn es einen deterministischen endlichen
Automaten mit drei Zuständen gibt, der im Binärsystem die durch drei
teilbare Zahlen erkennt, dann ist das der einzig mögliche.
Post by Hero Wunders
1. Wie geht man richtig systematisch so ein Problem an?
Angenommen, Du möchtest einen Automaten basteln, der im
n-Stellenwertsystem genau die durch k teilbaren Zahlen akzeptiert.
Einen Tip hast Du schon bekommen: Modulorechnen. Dass das klappt, liegt
an zwei Gründen:

A) Wenn zur Zahl x die Ziffer y angehängt wird, entspricht das
mathematisch der Operation n*x+y.
B) Die Restklassen mod k bilden einen Ring. Du kannst darin also mit den
üblichen Gesetzen addieren und multiplizieren, wie Du das gewohnt bist.
Insbesondere kannst Du die Operationen aus A) ausführen.

Damit kannst Du dann einen Automaten aufstellen, der für jedes k und für
jedes Stellenwertsystem, genau die Zahlen akzeptiert, die durch k
teilbar sind. Gleichzeitig ist dann ersichtlich, dass ein Automat, der
k-Teilbarkeit erkennt, mit k Zuständen auskommt, da jeder Zustand einer
Restklasse entspricht.
Post by Hero Wunders
2. Woher weiß man wieviele Zustände eine solche Maschine mindestens und
höchstens haben muss (das ist wahrscheinlich ein besonders schwieriges
Gebiet)?
Wenn man erst einmal einen endl. det. Automaten aufgestellt hat, gibt es
einen effizienten Algorithmus, der den Automaten äquivalent so
umzuformt, dass er eine minimale Anzahl an Zuständen hat
(Automatenminimierung). Dieser minimale Automat ist bis auf Isomorphie
(Umnumerierung der Zustände) eindeutig.



Gruss Stefan
Hero Wunders
2004-08-20 11:23:18 UTC
Permalink
Hallo!
Post by Stefan Kirchner
Post by Hero Wunders
Konstruiere einen Automaten, der anhand einer Zahl im Binärsystem
entscheidet, ob diese ohne Rest durch 3 teilbar ist.
Vom Lehrer haben wir noch den Tip bekommen, dass wir mindestens drei
Zustände einplanen müssen.
So, nun dachte ich mir, dass ich versuche Muster von allen durch 3
teilbaren Zahlen im Binärsystem zu finden und diese dann irgendwie in
einem Automaten umzusetzen.
[1. Versuch]
Hmm, auch da bin ich nicht weitergekommen.
Ok...
[2. Versuch]
Fertig.
Ist diese Argumentation dicht?
Ich schätze nicht, da ich nicht mit Sicherheit sagen kann, dass noch
andere Zahlen die genannten Eigenschaften haben.
Richtig, Du hast gezeigt: wenn es einen deterministischen endlichen
Automaten mit drei Zuständen gibt, der im Binärsystem die durch drei
teilbare Zahlen erkennt, dann ist das der einzig mögliche.
Inwiefern habe ich das gezeigt? Unter "etwas zeigen" verstehe ich etwas
zu beweisen.
Post by Stefan Kirchner
Post by Hero Wunders
1. Wie geht man richtig systematisch so ein Problem an?
Angenommen, Du möchtest einen Automaten basteln, der im
n-Stellenwertsystem genau die durch k teilbaren Zahlen akzeptiert.
Einen Tip hast Du schon bekommen: Modulorechnen. Dass das klappt, liegt
A) Wenn zur Zahl x die Ziffer y angehängt wird, entspricht das
mathematisch der Operation n*x+y.
B) Die Restklassen mod k bilden einen Ring. Du kannst darin also mit den
üblichen Gesetzen addieren und multiplizieren, wie Du das gewohnt bist.
Insbesondere kannst Du die Operationen aus A) ausführen.
Außer, dass er sowas Ähnliches wie ein Körper ist, weiß ich nicht was
ein Ring ist. Ich werde mich mal informieren.
Auch das Rechnen mit Restklassen ist mir ganz neu, da so etwas in der
Schule bisher nie gemacht wurde (ich kenne lediglich vom Programmieren
den % Operator, also a % b = c ergibt den Rest einer ganzzahligen
Division von a durch b).
Post by Stefan Kirchner
Damit kannst Du dann einen Automaten aufstellen, der für jedes k und für
jedes Stellenwertsystem, genau die Zahlen akzeptiert, die durch k
teilbar sind. Gleichzeitig ist dann ersichtlich, dass ein Automat, der
k-Teilbarkeit erkennt, mit k Zuständen auskommt, da jeder Zustand einer
Restklasse entspricht.
Ok.
Post by Stefan Kirchner
Post by Hero Wunders
2. Woher weiß man wieviele Zustände eine solche Maschine mindestens
und höchstens haben muss (das ist wahrscheinlich ein besonders
schwieriges Gebiet)?
Wenn man erst einmal einen endl. det. Automaten aufgestellt hat, gibt es
einen effizienten Algorithmus, der den Automaten äquivalent so
umzuformt, dass er eine minimale Anzahl an Zuständen hat
(Automatenminimierung). Dieser minimale Automat ist bis auf Isomorphie
(Umnumerierung der Zustände) eindeutig.
Klingt interessant!

Vielen Dank!
herojoker
Martin Fuchs
2004-08-20 08:30:11 UTC
Permalink
Post by Hero Wunders
2. Woher weiß man wieviele Zustände eine solche Maschine mindestens und
höchstens haben muss (das ist wahrscheinlich ein besonders schwieriges
Gebiet)?
Nach oben sind der Anzahl der Zustände eines Automaten offenbar keine
Grenzen gesetzt (du könntest ja beliebig viele nichterreichbare Zustände
einfügen).
Hat man allerdings einen Automaten, der das Gewünschte tut, kann man dazu
den zugehörigen Minimalautomaten konstruieren, dieser ist bis auf Umbenennung
eindeutig bestimmt.
Näheres in jedem Buch über Automatentheorie oder z.B. in [1].


mf


[1] http://www.rz.unibw-muenchen.de/~j1fm0182/goodies/FSA.pdf
Loading...