n Elememte aus m ziehen -> Wie alle Möglichkeiten?
-
Ich habe einen Vektor mit n Elementen, und möchte daraus m ziehen und alle Möglichkeiten durchgeben. Am liebsten wär mir dazu sowas wie next_permutation, aber mir fällt nichts geeignetes ein um das zu realisieren.
Ziel für alle verschiedenen Möglichkeiten 3 Elemente aus 100 zu ziehen:
vector<int> myvec; //.... 100 elemente füllen sort(myvec.begin(), myvec.end()); while(mynext_permutation(myvec.begin(), myvec.end(), 3)) { auswerten(myvec.begin(), myvec.begin() + 3); }
-
Hmm mit zurücklegen?
-
Ne ohne zurücklegen, aber ohne beachtung der Reihenfolge (auch noch wichtig, hab ich vergessen)!
Kleines Beispiel: A = [1, 2, 3, 4, 5]
Wenn ich daraus 3 Werte ziehe ergibt sich:
123, 124, 125, 234, 235, 245, 345
Würde mich auch über eine andere "schöne Lösung" freuen. Mir fällt einfach nix ein, was sich gut mit dem Konzept der STL verträgt.
-
Wenn ich mir die Werte so ansehen, könnte man eventuell mit vertauschen tricksen - da muss ich mal ausprobieren...
-
hmm
Durchiterireren, dabei:
bereits benutzte Elemente abspeichern
bereits gefunde Kombinationen abspeichern
und eben halt vergleichen, ob Kombi bereits gefunden, oder Element bereits benutzt
-
Nicht die schönste Lösung, aber sehr einfach:
- Alle Permutationen über die m Elemente formen,
- die ersten n Elemente jeder Permutation herausziehen und speichern,
- Doubletten entfernen.
-
Na ich will doch nichts extra zwischenspeichern. Wollte das zum Testen mal mit Spielkarten machen, da es im Grunde das gleiche ist wie ich vorhab. Wird später aber noch knapp 3x größer dimensioniert.
Also nehmen wir vector<Karte>, da sind 52 Karten drin. Nun alle Möglichkeiten 4 Karten zu ziehen an die Funktion auswerten(...) weitergeben. Da brauch ich keine Liste aller Möglichkeiten, sondern will nur jede einzeln auswerten.
Man ich kann mich net ausdrücken hmpf....
Auf gut C++: Vector nicht kopieren!