Anfänger braucht Hilfe ;)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Xano
User
Beiträge: 3
Registriert: Freitag 28. März 2008, 19:20

Freitag 28. März 2008, 19:26

Hi Leute,

Ich bin relativ neu in Python hab jedoch schon andere Sprachen geproggt. Jedoch weiss ich nicht wie ich folgendes Problem angehen soll (vorallem damit nicht 10 Jahre Rechenzeit drauf geht ;)

Als erstes ist ne Tabelle mit fix 7 Spalten... Die Zeilenzahl wird berechnet, jedoch kann mit mal fix 5 gemacht werden.

Also ne Tabelle mit 35 Felder... Auf jedem Feld können x Zahlen stehen (Also bei 5 Spalten die Zahlen 1-5). Von oben nach unten soll jede Zahl (oder jede 7. Zahl) nur einmal vorkommen.

Nun sollen alle möglichen Kombinationen in eine TXT Datei gespeichert werden... (Oder auch für jede Kombination eine Txt-Datei).

Grundsätzlich krieg ich das mit Schleifen hin, das dauert aba ewig! Gibts da ne einfachere Möglichkeit?

Zudem werden später noch mögliche Einschränkungen (z.B. nach 5 darf nicht 3 kommen folgen, dies jedoch erst im 2. Schritt...).

Danke schoma
Mfg Xano
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Freitag 28. März 2008, 19:49

Ich hab zwar nicht genau verstanden, was du machen möchtest, aber ich vermute mal das Problem liegt darin, dass es verdammt viele Möglichkeiten gibt die Zahlen anzuordnen.

Wenn ich dich richtig verstanden habe sind das (5!)^7 = 3.6E+14
Xano
User
Beiträge: 3
Registriert: Freitag 28. März 2008, 19:20

Freitag 28. März 2008, 19:58

Hi erstma Danke für die Antwort...

Im Prinzip sollte es das hier geben:

(Beispiel mit 35 Felder)

1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
1,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
1,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
usw...

Mir ist bewusst das das extrem viele Möglichkeiten gibt. Es wird später viele Einschränkungen geben, wie eben Zahl x nicht nach Zahl y, jede 7. Zahl darf nicht gleich sein usw... jedoch möchte ich erstma das da oben hinkriegen... Wie schaff ich das ausser ich schreibe es so:

Code: Alles auswählen

Zahlen =  [1,2,3,4,5]

for a in Zahlen:
    for b in Zahlen:
        for c in Zahlen:
            for d in Zahlen:
                print a,b,c,d
Da das später variabel wird, will ich net 35 Schleifen aneinanderhängen...

Mfg Xano
BlackJack

Freitag 28. März 2008, 20:10

Das was Du willst nennt sich Kombinationen. Die kann man zum Beispiel rekursiv erzeugen lassen, mit einer Generator-Funktion. Wurde schon öfter hier im Forum gefragt und beantwortet.

Allerdings bin ich mir nicht so sicher, ob Dir wirklich klar ist, dass es *sehr viele* Kombinationen gibt und Du mit Deinen 10 Jahren weit daneben liegst. Angenommen es würde eine Kombination pro Nanosekunde erzeugt, dann sind das bei den Zahlen 1 bis 5 und 35 Feldern ca. 37411 Jahre um alle Kombinationen auf zu zählen.
Xano
User
Beiträge: 3
Registriert: Freitag 28. März 2008, 19:20

Freitag 28. März 2008, 20:19

Danke für die Antwort... Ich werd mich mal bissl durchsuchen.

Das mit den Kombinationen ist mir schon klar. Wenn ich's mit Schleifen mache, kann ich die Überprüfung nach jeder Position einbauen. Somit fallen 99% aller möglichen Kombinationen schon heraus, bevor überhaupt alle restlichen Stellen berechnet werden!

z.B.
Einbauf Verbot; nach 2 keine 3

1,2,2,1
1,2,2,2
1,2,3 -> Restliche Stellen müssen nun nicht mehr berechnet werden...
1,2,4,1

usw...
BlackJack

Samstag 29. März 2008, 00:08

Bei dem Beispiel sind das aber keine 99% sondern knapp 5%. Und bei den 35 Stellen sind das mit der Regel "nur" 2881279215216636657714844 Kombinationen, statt 2910383045673370361328125. Das macht das ganze nicht wirklich schneller.
Antworten