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.?


Anmelden zum Antworten