Wie ziehe ich bei Python k aus n Elementen so effizient wie möglich?

1 Antwort

Dazu müsstest du dir ein Array basteln und dann die Elemente dieses Arrays gezielt

durcheinander mischen und einzeln ausgeben.

Beispiel:

3! = 1*2*3= 6:

abc, acb, bac, bca, cba, cab

Einfacher ist es jedoch dir zum Beispiel bei dir

Gegeben: Menge M = {1, 2, 3, 4, 5}, n = 5, k = 3.

eine Schleife basteln mit dem ersten Ausgabewert 100 und dem letzten 999.

Da ja k = 3

Da ja beide Limits für die Schleife 3 Stellen hat und du alle Möglichkeiten von 3er Kominationen ausgeben willst. Dazu wandelst du die Zahl in einen String und prüfst diesen auf Elemente, die du nicht haben willst. Etwa, das jedes Zeichen im String nur einmal vorkommen darf. Erst dann kannst du den String anzeigen.

In deinem einfachen Beispiel

wäre das in c

for (i = 100; i<= 999; i++)

{

//zuerst Zahl in String wandeln

//Dann prüfen ob jede Ziffer der Zahl nur einmal darin vorkommt

// Wenn letzte Bedingung erfüllt ist, String ausgeben

}

Da nur 123,132, 213,231,312 und 321 diese Vorgabe erfüllen, Zahl ausgeben.

Man kann zusätzlich dann auch ein eindimensionales Array mit Zeichen initialisieren 'a', 'b', 'c'

Dann zerlegst du die Ziffern wie etwa 312 wieder über den Umweg zum String in einzelne Ziffern, diese zu einem Zahlenwert und zeigst über eine separate Schleife

das Symbol dafür an.

Beide Vorgehensweisen kosten aber enorm viel Zeit.

Zudem ist im Normalfall nur ein Array aus Kleinbuchstaben, Großbuchstaben und Zahlen als Symbolische Platzhalter für die Elemente möglich:

26+26+10 = 62.

Aber 62 Faktorielle sind enorm viel.

Bis zur herkömmlichen Darstellung kannst du relativ einfach arbeiten,

da die Symbole für die Darstellung von dekadischen Ziffernsystemen auf 36

"0123456789abcdefghijklmnopqrstuvwxyz" begrenzt ist.

Solltest du etwa ein Passwort hacken wollen, bleibt dir nur der Weg mit der Schleife übrig. Eben weil eine ganz bestimmte Ziffernkombination einen bestimmten Zahlenwert aus einer Schleife zugeordnet werden kann.