Gunnar Bittersmann: Zufallsausgabe

Beitrag lesen

Hello out there!

Das schien mir erst nicht zu funktionieren. Dein Algorithmus

for(var i =0; i < this.length; i++){
    rand = i + Math.floor(Math.random() * (this.length - i));
  }


>   
> bevorzugt zweifellos große Werte für rand.  
  
Zweifellos. Muss ja auch:  
  
Beim 1. Schleifendurchlauf ist rand aus dem Intervall [0, this.length[;  
beim 2. Schleifendurchlauf ist rand aus dem Intervall [1, this.length[;  
beim 3. Schleifendurchlauf ist rand aus dem Intervall [2, this.length[ ...  
  
Beim 2. Schleifendurchlauf steht das Element rand[0] des am Ende auszugebenden Arrays schon fest und soll dann nicht mehr geändert werden;  
beim 2. Schleifendurchlauf steht das Element rand[1] des am Ende auszugebenden Arrays schon fest und soll dann nicht mehr geändert werden ...  
  
  

> rand:    0    1    2    3    4    5    6     7     8     9  
> Anzahl: 952 2103 3456 4745 6532 8447 10874 14272 19249 29370  
  
Zu erwartet gewesen wären\* (gerundet):  
          1000 2111 3361 4790 6456 8456 10956 14290 19290 29290  
  
  

> Wie man sieht, steigt die Wahrscheinlichkeit für einen bestimmten rand-Wert mit dessen Größe stark an. Von Gleichverteilung kann da absolut nicht die Rede sein.  
  
Nicht rand soll gleichverteilt sein, sondern die Permutationen der Arrayelemente.  
  
  

> > Das ist von einer echten Zufallsverteilung weit entfernt, sollte man meinen.  
  
Nö, passt schon.  
  
Testen kannst du solch einen Algorithmus, in dem du jedes Vorkommen von  
  `Math.floor(Math.random() * n)`{:.language-javascript}  
durch eine Schleife  
  `for (var i = 0; i < n; i++)`{:.language-javascript}  
ersetzt; dann hast du nämlich die Zahlen von 0 bis n - 1 wirklich gleichverteilt erzeugt.  
  
See ya up the road,  
Gunnar  
  
\* Berechnung:  
                    1/10 \* 10000 = 1000  
            (1/10 + 1/9) \* 10000 = 2111.11111  
      (1/10 + 1/9 + 1/8) \* 10000 = 3361.11111  
(1/10 + 1/9 + 1/8 + 1/7) \* 10000 = 4789.68254

-- 
„Und [dieses Forum] soll […] auch ein Fachforum bleiben und kein Psychologieforum werden.“ ([Kirsten Evers](https://forum.selfhtml.org/?t=158750&m=1033264))