Generieren aller möglichen Varianten 6 aus 49
-
Hi,
hab mal eine Frage ich brauche ein Tipp/Bsp zur Ausgabe aller möglichen Varianten 6 aus 49. Kann mir mal jemand Helfen? Welche Sprache geht mit Speicherplatz am sparsamsten um und schnell muss die auch sein?
- Ich habs mal mit Java versucht komme aber mit 256 MB RAM nur bis ca 1 Mio
- Mit C komme ich bis knapp 4 Mio möglichen Varianten.
- Ich brauche ein Algo, welches mir ermöglicht knapp 14 Mio auszugeben und ohne Wiederholungen natürlich.
- Zur Generierung ist es besser ein Vektor, Matrix oder Array zu verwenden?mfg
white.rabbit
-
Hi,
das sind zuwenig Informationen.
Ich kann mir nicht vorstellen, wofür man sowas brauch, also
erst recht nicht, in welcher Form man das abspeichern soll.Welchen Alogrithmus hast du denn bis jetzt verwendet?
(Bei dem Java bis 1 Million, C bis 4 Millionen kommt?)Jockel
-
#include <stdio.h> main() { int z1,z2,z3,z4,z5,z6,start,stop; int reihe=0,zahl=0; int v[6][100000]; // Ist kleiner geworden war davor über 10 Mio :-) start =1; stop=49; for(z1=start;z1<=(stop-5);z1++) { for(z2=(start+1);z2<=(stop-4);z2++) { for(z3=(start+2);z3<=(stop-3);z3++) { for(z4=(start+3);z4<=(stop-2);z4++) { for(z5=(start+4);z5<=(stop-1);z5++) { for(z6=(start+5);z6<=(stop);z6++) { if(z1==z2||z1==z3||z1==z4||z1==z5||z1==z6){} else if(z2==z3||z2==z4||z2==z5||z2==z6){} else if(z3==z4||z3==z5||z3==z6){} else if(z4==z5||z4==z6){} else if(z5==z6){} else { v[0][reihe]=z1; v[1][reihe]=z2; v[2][reihe]=z3; v[3][reihe]=z4; v[4][reihe]=z5; v[5][reihe]=z6; reihe++; }}}}}}} return 0; }
war nur ein Anfang dh. ohne Überprüfung auf Wiederholungen, ohne Sortierung.usw
Also nur ein Test wie meine Kiste geht.
mfg
white.rabbit
PS: Brauche für ein Projekt in der Schule.
Und Abspeichern würde ich es gerne in eine Datei (bloss bei knapp 28000 Einträgen war die Datei knapp 500 MB gross)
-
I) So müsste der Algorithmus funktionieren:
for(x1=1;x1<50;++x1) { for(x2=x1+1;x2<50;++x2) { ... for(x6=x5+1;x6<50;++x6) ... }
II) Das Array nicht auf den Stack legen, sondern auf den Heap per new
III) Bei solchen Mengen würde ich auf jedes Bit achten.
Du brauchst ja nur 6 Bit pro Zahl, also würde ich ein
int64 v[] = new int64[14Millionen+irgendwas]-Array anlegen und
entsprechende Methoden schreiben, die die Zahlen aus diesen Bits korrekt
lesen/schreiben.Jockel
-
II) Das Array nicht auf den Stack legen, sondern auf den Heap per new
Kannst mal ein Bsp zeigen??
III) Bei solchen Mengen würde ich auf jedes Bit achten.
Du brauchst ja nur 6 Bit pro Zahl, also würde ich ein
int64 v[] = new int64[14Millionen+irgendwas]-Array anlegen und
entsprechende Methoden schreiben, die die Zahlen aus diesen Bits korrekt
lesen/schreiben.Der Inhalt würde dann so aussehen zb.: "1 2 3 4 5 6" die Zahlen sind durch " ","_" usw verbunden. Und das Auslesen der Zahlen würde ich mit Tolken (oder so) auslesen oder sehe ich es falsch? Dann muss es aber ein String sein und kein Int.?