gpt4 book ai didi

bash - 在 Bash 中随机均匀分布

转载 作者:行者123 更新时间:2023-11-29 09:10:53 25 4
gpt4 key购买 nike

我一直在使用“shuf”和“sort -R”来随机播放我的音乐播放列表,但感觉某些歌曲比其他歌曲播放得更多。

为了对此进行测试,我使用了以下命令来打乱字母表并记录打乱的第一个字母,重复 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 命令来/可以更均匀地分配随机结果?

最佳答案

回到高中概率。对于 26 个箱子,任何箱子中的项目数 k 的分布应该是二项式的(如果 shuf 正常工作):B(k; 1000, 1/26 ).这是 k 在 1000 次试验中成功的概率,其中任何试验的成功概率为 1/26。

二项式的方差 Var = np(1 - p) = 1000(1/26)(25/26) =~ 37

现在您的结果的方差是多少?即 E(X^2) - (E(X))^2。您可以快速将数据插入 Google 表格或类似工具。 36岁。

因此,您的结果与完全随机数据的方差仅存在微小差异。正如大自然所预测的那样“均匀”。

根据您提供的非常有限的信息得出的结论是,shuf 正在按照其设计的目的进行操作。

如果您希望某些歌曲出现而不是完全随机出现,您可以设计一种权重方案,使某些歌曲优先于其他歌曲。一个非常简单的方法是将原始列表中的每首歌曲 i 放入 W_i 副本中,其中 W_i 是所需的相对权重。然后洗牌。还有许多其他可能的方案。

[这就是为什么每当有人说成为计算机程序员不需要数学时我都会捧腹大笑。]

关于bash - 在 Bash 中随机均匀分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45384623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com