我一直在使用「shuf」和「sort -R」來隨機播放我的音樂播放列表,但感覺某些歌曲的播放比其他歌曲更多。在Bash中隨機分佈
爲了測試這個,我使用了下面的命令,將字母順序混合並在洗牌中記錄第一個字母,重複x1000,然後計算每個字母被選取的次數。如果是真正的隨機會有均勻分佈,但它總是一面倒:
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
導致類似:
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
通知「T」是如何選擇53次,但'W'只有29次。我相信我經常聽到的歌曲就像't',而且我很少聽到這些歌曲(比如'w')。
任何人都可以想出一個Bash/Perl/Python/etc命令,以便/可以更均勻地分發隨機結果嗎?
......你要知道,我需要運行一些統計要知道你的結果(上面)實際上*是否反映了任何一種錯誤;他們確實不完全清楚。如果你跑了另一千,你是否有相同的字母有利和不利? –
@BenjaminW。我認爲你是對的,但問題的標題和標籤是誤導性的。 – archemiro
附註:不會'printf'%s \ n「{A..Z} {a..z} | nl -ba'是一種更簡單的方法來生成您的示例結果? –