Christoph Zurnieden: Zufälliges Mischen von Variablen!?

Beitrag lesen

Hallo,

beim Mischen hast Du mehrere Möglichkeiten. Wenn Du nur irgendwelche Zufallswerte benötigst, die nicht zweimal vorkommen dürfen, ist die Lösung von Gernot gut. Wenn du aber eine vorgegebene Menge mischen willst, wie z.B. bei einem Kartenspiel oder bei einer zufälligen Auswahl von Bildern, biete sich folgende Lösung an:

du nimmst ein 2D-Array, legst in die eine Spalte deine Werte und füllst die andere Spalte mit Zufallszahlen. Wenn Du nun das 2D-Array nach der Spalte mit den Zufallszahlen sortierst, ist die andere Spalte gemischt. Ein Beispiel findest Du unter:
http://www.j-berkemeier.de/Buchstabenmixer.html

Das ist komplexer als nötig, da gibt es eine geradezu klassische Lösung (So klassisch, das ich noch nicht einmal herausbekommen konnte, wer's als erster gefunden hat ;-), die das Array in-place mischt (Hier in C):

for(i=0;i<ArraySize;i++){
  randnum        = (myRandom() % ArraySize);
  tmp            = array[i];
  array[i]       = array[randnum];
  array[randnum] = tmp;
}

Für jedes Mitglied im Array erzeuge eine Zufallszahl im gewünschtem Bereich (meistens die Kardinalität, also alle) und tausche mittels einer temporären Variablen (Kann in Sonderfällen natürlich auch entfallen) die gerade ausgesuchte Stelle im Array gegen eine zufällig ausgewählte Position im Array.

Die Auswahl des Zufallbereiches mittels Modulo ist für einige Zwecke nicht ausreichend zufällig (Ergibt Häufung im unterem Bereich), für so ein wenig Spielerei reicht's aber vollkommen.

(Ich empfehle übrigens eine eigene Zufallsfunktion für solche Spielereien, da die Systementropie dafür nun wirklich zu kostbar ist)

so short

Christoph Zurnieden