Ich habe "shuf" und "sort -R" verwendet, um meine Musik-Playlist zu mischen, aber es fühlt sich an, als würden bestimmte Songs mehr gespielt als andere.Gleichmäßig verteilt zufällig in Bash
Um dies zu testen, habe ich den folgenden Befehl verwendet, der das Alphabet mischt und den ersten Buchstaben im Shuffle aufzeichnet, wiederholt x1000 und zählt dann die Anzahl der Male, die jeder Buchstabe ausgewählt wurde. Wenn es wirklich zufällig gab es wäre eine gleichmäßige Verteilung sein, aber es ist immer schiefes:
printf "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk\nl\nm\nn\no\np\nq\nr\ns\nt\nu\nv\nw\nx\ny\nz" > alphabet.txt; for i in {1..1000}; do cat alphabet.txt | perl -MList::Util=shuffle -e 'print shuffle(<STDIN>);' | perl -e 'print reverse <>' | head -1 >> results.txt; done; sort results.txt | uniq -c | sort; rm results.txt; rm alphabet.txt
, die in etwas Ergebnisse wie:
29 w 30 u 31 d 32 i 33 v 34 c 34 m 36 a 36 g 36 k 36 n 36 r 36 z 38 y 39 x 40 b 40 e 40 o 42 p 43 f 43 h 43 s 44 j 44 l 52 q 53 t
Beachten Sie, wie ‚t‘ ausgewählt wurde 53 mal, aber "w" nur 29. Ich glaube, die Lieder, die ich am häufigsten höre, sind wie das "t", und es gibt Songs, die ich selten im Mix finde (wie das "w").
Kann jemand mit einem Bash/Perl/Python/etc Befehl kommen, der die zufälligen Ergebnisse gleichmäßig verteilen würde?
... Wohlgemerkt, ich einige Statistiken laufen bräuchten zu wissen, ob deine Ergebnisse (oben) tatsächlich * irgendeine Art von Bug * widerspiegeln; es ist nicht klar, dass sie es tun.Wenn Sie noch einmal tausend laufen, haben Sie die gleichen Buchstaben bevorzugt und benachteiligt? –
@BenjaminW. Ich denke, Sie haben recht, aber dann sind der Titel der Frage und die Tags irreführend. – archemiro
Randnotiz: Wäre nicht "printf"% s \ n "{A..Z} {a..z} | nl -ba' eine einfachere Möglichkeit, Ihre Beispielergebnisse zu generieren? –