H
Hier!Bei Fehlern einfach laut "Hier!" rufen.
ich hane echt keine Ahnung von dem Thema, hoffe dass der prof das morgen erklärt in theoretische Informatik ansonsten bye !!!Hier!
Ich würde argumentieren, dass dein erster Automat für "w enthält genau ein a" falsch ist. Er landet auch für das Wort w="aaa" im akzeptierenden Endzustand q1. Du hast zwar geschrieben "ohne nicht akzeptierenden Zustand", aber den braucht man definitiv, bzw brauchst du einfach mehr Zustände, um von q1 mit einem weiteren 'a' wieder wegzukommen zu einem Zustand, den man nicht mehr verlassen kann.
Dein zweiter Automat ist auch falsch, da hier nicht gelten muss, dass "jedes 'a' in w folgt unmittelbar auf ein 'b'". Dein Automat akzeptiert ja auch w="baaaa" (in diesem Wort folgt eben nicht jedes 'a' unmittelbar auf ein 'b').
Der dritte Automat ist ebenfalls falsch, da er w="b" sowie w="bb" und auch w="ababa" nicht erkennt.
chiermosky Hierarchie.... genau.ich habe chiermosky Hierarchie alles verstanden.
hauptsache ich weiß wie es geht lol hahachiermosky Hierarchie.... genau.
Chomsky!!!!
kannst du mir vllt erklären was die aufgabe verlangt?lol... haha...
dann frage ich privatDiese Codewars Aufgabe hat doch mit diesem Thema überhaupt nichts mehr zu tun...
Mach einfach ein neues Thema auf...dann frage ich privat
Scheiße, ich habe das "genau ein" überlesen... Dann muss bei "a, b" das "a, " gestrichen werden."w enthält genau ein a"
Das musst du genau lesen "b über a" bedeutet hier, a v.l.n.r. und b v.r.n.l. ... Das heißt, ein zusätzliches a in q2 wäre unzulässig/ nicht akzeptierend - und damit wärs richtig.Dein zweiter Automat ist auch falsch,
Ja das stimmt... Obwohl ich mir viel Mühe bei gegeben habe, müssen da überall noch b-Kringel dran...Der dritte Automat ist ebenfalls falsch,
ich setzet mich mit kollegen da ran und machen die dann.Scheiße, ich habe das "genau ein" überlesen... Dann muss bei "a, b" das "a, " gestrichen werden.
Das musst du genau lesen "b über a" bedeutet hier, a v.l.n.r. und b v.r.n.l. ... Das heißt, ein zusätzliches a in q2 wäre unzulässig/ nicht akzeptierend - und damit wärs richtig.
Ja das stimmt... Obwohl ich mir viel Mühe bei gegeben habe, müssen da überall noch b-Kringel dran...
Gut das man nochmal darüber diskutiert... Aber auch DEAs mit impliziten, nicht akzeptierenden Endzuständen können formal korrekt sein... wenn man schreibfaul ist.
@Heyoka955 Die anderen/ übrigen Aufgaben leiten sich eigentlich daraus ab, wenn man erstmal den Anfang hat...
Roger.ich setzet mich mit kollegen da ran und machen die dann.
Ja, darum habe ich das mal sehr ausführlich gemacht und auch nur für die erste (= einfachste) der Aufgaben Warum er in der Vorlesung nichts verstanden hat, weiß ich nicht. Die Funktionsweise von Automaten ist ja nun wirklich nicht so schwer zu verstehen. Ich hoffe halt für ihn, dass er aus der Erklärung was mitnehmen kann, bekomme aber Zweifel, wenn ich lese "und machen die dann."Die andere Sache ist die... dass er in der Vorlesung (angeblich) gar nichts versteht... ? Warum nicht? Woran liegt das? Was müsste sich ändern? usw usf.
Das liegt im Bereich des Möglichen. Gute Nacht.dass noch um 3 Uhr wieder Beiträge geschrieben werden heute/morgen...
so ? zu 1 und 2Ja, darum habe ich das mal sehr ausführlich gemacht und auch nur für die erste (= einfachste) der Aufgaben Warum er in der Vorlesung nichts verstanden hat, weiß ich nicht. Die Funktionsweise von Automaten ist ja nun wirklich nicht so schwer zu verstehen. Ich hoffe halt für ihn, dass er aus der Erklärung was mitnehmen kann, bekomme aber Zweifel, wenn ich lese "und machen die dann."
so ? zu 1 und 2
besser kriege ich es nicht hin.Nein. Bei Aufgabe 1 fehlt mind. eine Kante, bei Aufgabe 2 hast Du Kanten ohne Beschriftung und bei Aufgabe 3 keinen Endzustand.
List<Uebergang> a = List.of(
new Uebergang("q0", "b", "q0", false),
new Uebergang("q0", "a", "q1", true),
new Uebergang("q1", "b", "q1", true));
test(a);
List<Uebergang> b = List.of(
new Uebergang("q0", "b", "q1", true),
new Uebergang("q1", "b", "q1", true),
new Uebergang("q1", "a", "q2", true),
new Uebergang("q2", "b", "q1", true));
test(b);
List<Uebergang> c = List.of(
new Uebergang("q0", "b", "q0", true),
new Uebergang("q0", "a", "q1", false),
new Uebergang("q1", "b", "q1", false),
new Uebergang("q1", "a", "q2", false),
new Uebergang("q2", "b", "q2", false),
new Uebergang("q2", "a", "q3", true),
new Uebergang("q3", "b", "q0", true),
new Uebergang("q3", "a", "q1", false));
test(c);
Testing [(q0,b,q0), (q0,a,q1(f)), (q1,b,q1(f))]:
aaaa => null
aaab => null
aaba => null
aabb => null
abaa => null
abab => null
abba => null
abbb => true
baaa => null
baab => null
baba => null
babb => true
bbaa => null
bbab => true
bbba => true
bbbb => false
Testing [(q0,b,q1(f)), (q1,b,q1(f)), (q1,a,q2(f)), (q2,b,q1(f))]:
aaaa => null
aaab => null
aaba => null
aabb => null
abaa => null
abab => null
abba => null
abbb => null
baaa => null
baab => null
baba => true
babb => true
bbaa => null
bbab => true
bbba => true
bbbb => true
Testing [(q0,b,q0(f)), (q0,a,q1), (q1,b,q1), (q1,a,q2), (q2,b,q2), (q2,a,q3(f)), (q3,b,q0(f)), (q3,a,q1)]:
aaaa => false
aaab => true
aaba => true
aabb => false
abaa => true
abab => false
abba => false
abbb => false
baaa => true
baab => false
baba => false
babb => false
bbaa => false
bbab => false
bbba => false
bbbb => true
hab ich das richtig oder wie ?@httpdigest So falsch war meins gar nicht... sogar verdammt nah an richtig...
null bedeutet nicht akzeptierender Endzustand, true akzeptiert, false nicht akzeptiert und (f) steht an Endzuständen dran:
Java:List<Uebergang> a = List.of( new Uebergang("q0", "b", "q0", false), new Uebergang("q0", "a", "q1", true), new Uebergang("q1", "b", "q1", true)); test(a); List<Uebergang> b = List.of( new Uebergang("q0", "b", "q1", true), new Uebergang("q1", "b", "q1", true), new Uebergang("q1", "a", "q2", true), new Uebergang("q2", "b", "q1", true)); test(b); List<Uebergang> c = List.of( new Uebergang("q0", "b", "q0", true), new Uebergang("q0", "a", "q1", false), new Uebergang("q1", "b", "q1", false), new Uebergang("q1", "a", "q2", false), new Uebergang("q2", "b", "q2", false), new Uebergang("q2", "a", "q3", true), new Uebergang("q3", "b", "q0", true), new Uebergang("q3", "a", "q1", false)); test(c);
Code:Testing [(q0,b,q0), (q0,a,q1(f)), (q1,b,q1(f))]: aaaa => null aaab => null aaba => null aabb => null abaa => null abab => null abba => null abbb => true baaa => null baab => null baba => null babb => true bbaa => null bbab => true bbba => true bbbb => false Testing [(q0,b,q1(f)), (q1,b,q1(f)), (q1,a,q2(f)), (q2,b,q1(f))]: aaaa => null aaab => null aaba => null aabb => null abaa => null abab => null abba => null abbb => null baaa => null baab => null baba => true babb => true bbaa => null bbab => true bbba => true bbbb => true Testing [(q0,b,q0(f)), (q0,a,q1), (q1,b,q1), (q1,a,q2), (q2,b,q2), (q2,a,q3(f)), (q3,b,q0(f)), (q3,a,q1)]: aaaa => false aaab => true aaba => true aabb => false abaa => true abab => false abba => false abbb => false baaa => true baab => false baba => false babb => false bbaa => false bbab => false bbba => false bbbb => true
Damit ist Aufgabe 1 jetzt gelöst.
nein, ich meinte damit einfach meinen Beitrag #3 ..hab ich das richtig oder wie ?
dann weiß ich nicht mehr weiter...nein, ich meinte damit einfach meinen Beitrag #3 ..
Ich habe mir den Code nicht genau angeschaut weil ich auf eine antowrt wollte uns Feedback dazu.@Heyoka955 sag mal, das kannst Du doch jetzt nicht ernst meinen. Der Graph ist in Kommentar #18 komplett definiert und Du schaffst es nicht, ein Bild dazu zu malen. Das kann doch nicht so schwer sein, eine Übergangsfunktion, die gerade mal drei Kanten eines Graphen angibt, korrekt auf ein Bild zu übertragen.
Ich verstehe noch nicht wie du auf 4 Zustände kommst. Die Aufgabe heißt doch "die Anzahl a’s in w ist ein Vielfaches von 3". Demnach gibt es die Zustände "|a| % 3 = 0" (q0), "|a| % 3 = 1" (q1) und "|a| % 3 = 2" (q2), wobei alleine q0 akzeptierend ist.List<Uebergang> c = List.of( new Uebergang("q0", "b", "q0", true), new Uebergang("q0", "a", "q1", false), new Uebergang("q1", "b", "q1", false), new Uebergang("q1", "a", "q2", false), new Uebergang("q2", "b", "q2", false), new Uebergang("q2", "a", "q3", true), new Uebergang("q3", "b", "q0", true), new Uebergang("q3", "a", "q1", false)); test(c);
----> q0* --a--> q1 --a--> q2
^----------a----------`
ich bin nicht zur Uni gegangen, wollte die Aufgabe selbst lösen.@Heyoka955 Ich verstehe ja dass das für Dich alles neu ist usw., allerdings steht die Lösung quasi schon in Kommentar #3 und in Kommentar #27 ... Das heißt, diese könntest Du einfach nehmen.
Und ja ich kenne auch Vorlesungen bei denen man einfach nichts verstehen kann. Dann musst Du Dir dieses Wissen irgendwie anders zulegen. Wie läuft es denn mit den anderen und mit denen Du lernen und Zettel lösen wolltest? ... (Aber Lektüre kaufen ist erst einmal nur gut für den Geldbeutel des jeweiligen Autor. )
Wahrscheinlich kommen jetzt 1.000 Gegenfragen, deswegen sach ich schon einmal dass ich morgen erst wieder ins Forum schauen kann. Bis dann!
Dann lass dir was raten, von jemanden der auch nie auf der Uni war und sich alles quasi selbst beigebracht hat:ich bin nicht zur Uni gegangen, wollte die Aufgabe selbst lösen.
Habe Videos angeschaut und intuitiv gearbeitet.
Stimmt, der "Graph" zu A 1 3. ist bei mir nicht minimal, sondern hat einen Zustand mehr.Ich verstehe noch nicht wie du auf 4 Zustände kommst
List<Uebergang> c = List.of(
new Uebergang("q0", "b", "q0", true),
new Uebergang("q0", "a", "q1", false),
new Uebergang("q1", "b", "q1", false),
new Uebergang("q1", "a", "q2", false),
new Uebergang("q2", "b", "q2", false),
new Uebergang("q2", "a", "q0", true));
test(c);
public class StateMachine {
public enum State1 {
Q0(false), // no 'a' event happened
Q1(true); // exact 1 'a' event happened
private boolean accepting;
private State1(boolean accepting) {
this.accepting = accepting;
}
public boolean isAccepting() {
return accepting;
}
public State1 onA() {
switch(this) {
case Q0: return Q1;
}
return null;
}
public State1 onB() {
switch(this) {
case Q0: return Q0;
case Q1: return Q1;
}
return null;
}
}
public static boolean test(String events) {
State1 state = State1.Q0; // initial
for(int i = 0; i < events.length(); i++) {
switch(events.charAt(i)) {
case 'a': state = state.onA(); break;
case 'b': state = state.onB(); break;
default: return false; // unhandled event occured
}
if(state == null) return false;
}
return state.isAccepting();
}
public static void main(String args[]) {
System.out.println(test("")); // false
System.out.println(test("a")); // true
System.out.println(test("b")); // false
System.out.println(test("bb")); // false
System.out.println(test("bab")); // true
System.out.println(test("ba")); // true
System.out.println(test("aa")); // false
}
}
for (int i = 0; i < 16; i++) {
String w = String.format("%04d", Integer.parseInt(Integer.toBinaryString(i))).replace('0', 'a').replace('1', 'b');
}
Habe doch nichts anderes gesagt. Ich wollte die andere Variante nur ergänzen weil ich sie selbst anschaulicher finde und hoffe es hilft ihm endlich den Schalter umzulegen.@MoxxiManagarm Wie ich es implementiert habe ist doch meine Sache...
Wenn man so viele Testfälle haben will dann klar.Aber ich möchte Dir trotzdem einen kleinen Tipp geben
Habe doch nichts anderes gesagt. Ich wollte die andere Variante nur ergänzen weil ich sie selbst anschaulicher finde und hoffe es hilft ihm endlich den Schalter umzulegen.
Wenn man so viele Testfälle haben will dann klar.
Kann auch nicht passen, müssten schließlich 3 Zustände sein.1b) habe ich mir inhaltlich nicht angesehen, da kein Endzustand vorhanden.
Er hat nur meinen Ascii-Graphen abgezeichnet und meinen Kommentar darunter nicht gesehen ;-)1c) wo ist das b?
Weißt du wie die b geht ?1a) passt
1b) habe ich mir inhaltlich nicht angesehen, da kein Endzustand vorhanden.
1c) wo ist das b?
Das haben wir doch bereits deutlich gemacht. Du hast 3 Zustände.Weißt du wie die b geht ?
Vielleicht hilft dir ja auch eine Verbildlichung. Nehmen wir eine Küche.
Initial State q0 = Du bist in der Küche mit einem leeren Küchentisch
Event b = du kochst etwas, q1 = es steht Essen auf dem Tisch
Event a = du isst alles was auf dem Tisch steht, q2 = die Teller auf dem Tisch sind nun leer
Logischer Weise kannst du nur was warmes Essen, wenn du zuvor etwas gekocht hast. b muss also stattgefunden haben.
q0: Kannst du etwas essen, wenn du gerade erst in die Küche gekommen bist?
q0: Kannst du etwas kochen, wenn du gerade erst in die Küche gekommen bist?
q1: Du hast gerade gekocht, kannst du nun essen?
q1: Du hast gerade gekocht, kannst du noch mehr kochen?
q2: Du hast gerade alles aufgegessen. Kannst du noch mehr essen?
q2: Du hast gerade alles aufgegessen. Kannst du wieder was kochen?
Oh hahaaha ist der dann richtigDer Graph den du gerade gezeigt hast, der gehört zu 1.3 nicht zu 1.2