Gibt es einen effizienten Algorithmus um alle Wortkombination bestimmter Buchstaben zu erstellen?

6 Antworten

Wie kommst Du auf 720 Wörter? Das bedeutete, Du nutztest nur sechs verschiedene Buchstaben.

Es gibt dreißig Buchstaben im Deutschen, die bei einer sechsbuchstabigen Zeichenkette 729 Millionen Möglichkeiten ergeben.

Wenn die vermehrt unsinnigen Kombinationen auslässt, bleiben bestimmt noch mehrere Tausend.

Rekursiv geht das prima:

main:
all_permutations([A,B,C,D,E], []);

function all_permutations(residual_set, current_word)
{
if (residual_set = [])
{
show current_word;

} else
{
for (letter : residual_set)
{
all_permutations(residual_set - letter, current_word + letter);
}
}
}

Woher ich das weiß:Hobby – Hobby seit meiner Jugend

Rekursiv fliegt dir das ding um die ohren, minjung

0
@Gurkenbruder

Wieso tut es das? Die Menge der verbleibenden Buchstaben wird immer kleiner, und ich habe eine Abbruchbedingung, wenn diese Menge leer ist. Übersehe ich da was?

0
@ShimaG

Die Menge aller möglichen Kombinationen steigt exponentiell an -> stackoverflow

0
@Gurkenbruder

Das Ding hat Rekursionstiefe n, nicht n!, das ist überhaupt kein Problem.

n! steigt übrigens überexponentiell an.

0

Wann ist etwas ein Wort? Wenn es im Duden steht? Namen? Ortschaften? Fremdsprachen? Das müsstest du schon erst definieren und uns eine klare Aufgabenstellung geben.

Wenn es aus den Buchstaben besteht die ich dem Programm gebe, wenn ich a b und c gebe dann sind abc, acb, cab, cba. bac. bca alles Wörter

0
@NettUndTolerant

Dann würde ich mir die Wörter mittels Programm quasi aufbauen und zwar wie folgt:

du startest immer mit dem Wert a, dieser hat zwei Stellen wo eine b landen muss, für alle Werte von 2! nämlich *a* (mit * markiert). Also ba und ab. Diese zwei Werte abfüllen und jetzt nutzen für 3! und zwar sind die Stellen wo ein c landen muss: *a*b* und dass natürlich für alle vorher gefundenen Werte also auch *b*a*

Konkret zwischen allen Buchstaben und am Ende und am Anfang muss für jeder Wert der vorherigen Stufe eine neue Ziffer eingefügt werden.

Wenn du jetzt für z.B. 4! alle Werte bauen willst, nimmst du dir abc und fügst eine d vorne hin, zwischen "ab" zwischen "bc" und am Ende und das nicht nur für abc sondern alle Werte die du bereits bei 3! gefunden hast. Welche du mittels anfügen von c an allen Werten die du bei 2! gefunden hast generierst usw.

Also für 5! nimmst du alle generierten Werte von 4! und fügst jedem Wert an jeder Stelle eine e an also wieder da wo ich Sterne schreibe: *a*b*c*d*

Wie ich das jetzt effektiv auf Code schreibe, da müsste ich mir auch kurz 1-2h gönnen, aber ich hoffe dir bringt die Idee bereits etwas

1

Wie kommst Du denn auf n! ? Bei 6 Buchstaben komme ich auf 26^6 = 308.915.776
oder ich habe die Beschreibung falsch verstanden.

n Objekte kann man auf n! Weisen anordnen, also kann man zb aus den 6 Buchstaben a b c d e f insgesamt 720 unterschiedliche Wörter bilden

0

Wieso willst du Wörter von a-z generieren, wenn du sowieso eine Liste der Wörter z.B. [b,f,k,i,o,i] eintippst? Nimm doch einfach diese Liste her & generiere die Wörter.

Woher ich das weiß:Studium / Ausbildung – Mathematik-Studium

Was möchtest Du wissen?