Select-Funktion
-
@SeppJ sagte in Select-Funktion:
Was ist denn deine genaue Anforderung?
Gute Frage, das habe ich noch nicht erwähnt.
Es sollen N Elemente zufällig (und fair (obwohl das ein schwammiger Begriff wäre)) aus der Menge gezogen werden und die Reihenfolge soll beibehalten werden.
@SeppJ sagte in Select-Funktion:
So, dass du, wenn du beispielsweise nur 2 Elemente ziehst, du eines aus der ersten Hälfte und eines aus der zweiten Hälfte ziehst?
Nein, das sollte eigentlich nicht passieren, da ja am Anfang
offset * 2gerechnet wird.Beispiel: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
1 und 2 soll ebenso gezogen werden können wie 3 und 8.
-
Na, wenn es einfach nur zufällig sein soll, dann lass das ganze Gebiase halt weg. Zieh N verschiedene Zahlen aus der Menge möglicher Indizes, gerne auch sortiert, und dann die zugehörigen Elemente genommen, fertig. Schwieriger und anspruchsvoller wird das erst, wenn die Größe des Inhalts nicht feststeht, aber hier kennst du
in.size()ja genau. Das gibt's aber auch direkt schon fertig: std::sample bzw. std::ranges::sample. Die kommen übrigens auch mit unbekannter Größe der Eingangsmenge zurecht.
-
@SeppJ sagte in Select-Funktion:
Zieh N verschiedene Zahlen aus der Menge möglicher Indizes, gerne auch sortiert, und dann die zugehörigen Elemente genommen, fertig.
Das kann man zwar tun, dauert dann aber doppelt so lange, und wäre mathematisch auch nicht sauber.
Vielleicht muss man einfach nur Element für Element durchgehen und per Zufall ermitteln, ob das aktuelle Element gezogen wird oder nicht.

-
@Lennox sagte in Select-Funktion:
@SeppJ sagte in Select-Funktion:
Zieh N verschiedene Zahlen aus der Menge möglicher Indizes, gerne auch sortiert, und dann die zugehörigen Elemente genommen, fertig.
Das kann man zwar tun, dauert dann aber doppelt so lange, und wäre mathematisch auch nicht sauber.
Ähh, was?
Vielleicht muss man einfach nur Element für Element durchgehen und per Zufall ermitteln, ob das aktuelle Element gezogen wird oder nicht.
Oh, toll, das verschiebt dich bloß von O(anzahl samples) nach O(Größe der Menge). Du hattest was von Effizienz sagen wollen? Und wie du das mathematisch sauber machen willst, wäre noch interessanter
-
Mal eine Zwischenfrage: Wie sortiert man denn einen zweiten Vektor, der eine Teilmenge des ersten darstellt, so, dass er in der Reihenfolge des ersten Vektors wäre? Ich kenne dafür den entsprechenden Begriff gerade nicht...
-
@Lennox
Indem du die Elemente des Quellvektors in deren Reihenfolge in den Zielvektor einfügst?
-
Das war nicht meine Frage. Geht es hier immer so unsachlich zu?
-
Dieser Beitrag wurde gelöscht!
-
Ich habe da so eine Vermutung...
-
@DocShoe
Ack