Schattenfänger
Lt. Junior Grade
- Registriert
- Nov. 2010
- Beiträge
- 273
Hallo,
ich möchte einen Graphen verkleinern.
Wie der Algorithmus abläuft ist mir klar, allerdings habe ich hier zwei Grobe Probleme ihn umzusetzen.
hier wäre er erklärt, auf der englischen Wiki steht zwar auch einer, aber denn verstehe ich nicht so ganz.
Der Algo funktioniert indem man die Endzustände und Nicht-Endzustände in eigene Mengen schreibt.
Dann mit Wörtern der Länge eins bis n durchgehe und wenn man mit einem Wort innerhalb einer Menge in einen anderen Zustand kommt als mit den anderen wird die Menge geteilt.
1.)
Ich weiß nicht wie ich die Kombinationen erstellen soll.
Ich habe zwar bereits mehrere Schleifen und Rekursionen durchprobiert aber ich komme nicht drauf wie ich die Buchstaben korrekt zusammensetze.
Sagen wir mal ich habe (a,b,c), dann möchte ich von eins bis n:
a,b,c
aa,ab,bb,ba
aaa,aab,bbb,....
Ich komme leider nicht drauf wie ich sowas schreibe.
Die Mengen werden als Set<Set<>> gespeichert.
2.)Wie soll ich die neun Mengen speichern?
Im Moment habe ich drei Schleifen, die zwei Äußeren holen mir die zu betrachtende Menge raus. Die Dritte geht über das Alphabet.
Mir ist leider nicht klar wie ich die Ergebnisse vergleichen soll.
Sagen wir ich habe die Menge (6,7)
6 geht mit a in einen Endzustand, mit b nicht.
7 geht mit a in einen Endzustand, mit b auch. -> unterschiedlich, also trennen.
Also wird die Menge (6,7) aus meinem Set gelöscht und die zwei Mengen 6 und 7 hinzugefügt.
Das einzige was mir eingefallen ist, ist dass ich ja jedes mal die Knoten in eine neue temp-Menge speichern könnte und diese nach abarbeitung dann vergleiche. Aber bei diesem Ansatz kommt es immer darauf hinaus, dass die Anzahl der Mengen so groß wird wie die Anzahl der Wörter.
Sprich 5 mit a nach NichtEnda1
5 mit b nach NichtEndb1
6 mit a nach Enda1
6 mit b nach Nichtenda1
Wenn ich dann aber schon aa,ab, usw habe:
5 mit aa nach endbb
5 mit ab....
Wird irgendwie relativ viel.
Oder sollte ich überhaupt die Alphabet-Schleife nach "draußen" ziehen?
Wäre super wenn mir jemand was zu meinem Problemen sagen könnte.
ich möchte einen Graphen verkleinern.
Wie der Algorithmus abläuft ist mir klar, allerdings habe ich hier zwei Grobe Probleme ihn umzusetzen.
hier wäre er erklärt, auf der englischen Wiki steht zwar auch einer, aber denn verstehe ich nicht so ganz.
Der Algo funktioniert indem man die Endzustände und Nicht-Endzustände in eigene Mengen schreibt.
Dann mit Wörtern der Länge eins bis n durchgehe und wenn man mit einem Wort innerhalb einer Menge in einen anderen Zustand kommt als mit den anderen wird die Menge geteilt.
1.)
Ich weiß nicht wie ich die Kombinationen erstellen soll.
Ich habe zwar bereits mehrere Schleifen und Rekursionen durchprobiert aber ich komme nicht drauf wie ich die Buchstaben korrekt zusammensetze.
Sagen wir mal ich habe (a,b,c), dann möchte ich von eins bis n:
a,b,c
aa,ab,bb,ba
aaa,aab,bbb,....
Ich komme leider nicht drauf wie ich sowas schreibe.
Die Mengen werden als Set<Set<>> gespeichert.
2.)Wie soll ich die neun Mengen speichern?
Im Moment habe ich drei Schleifen, die zwei Äußeren holen mir die zu betrachtende Menge raus. Die Dritte geht über das Alphabet.
Mir ist leider nicht klar wie ich die Ergebnisse vergleichen soll.
Sagen wir ich habe die Menge (6,7)
6 geht mit a in einen Endzustand, mit b nicht.
7 geht mit a in einen Endzustand, mit b auch. -> unterschiedlich, also trennen.
Also wird die Menge (6,7) aus meinem Set gelöscht und die zwei Mengen 6 und 7 hinzugefügt.
Das einzige was mir eingefallen ist, ist dass ich ja jedes mal die Knoten in eine neue temp-Menge speichern könnte und diese nach abarbeitung dann vergleiche. Aber bei diesem Ansatz kommt es immer darauf hinaus, dass die Anzahl der Mengen so groß wird wie die Anzahl der Wörter.
Sprich 5 mit a nach NichtEnda1
5 mit b nach NichtEndb1
6 mit a nach Enda1
6 mit b nach Nichtenda1
Wenn ich dann aber schon aa,ab, usw habe:
5 mit aa nach endbb
5 mit ab....
Wird irgendwie relativ viel.
Oder sollte ich überhaupt die Alphabet-Schleife nach "draußen" ziehen?
Wäre super wenn mir jemand was zu meinem Problemen sagen könnte.