algorithm - 具有随机性的 Riffle 洗牌算法

标签 algorithm random

riffle shuffle 算法过于机械且可预测。我们如何添加一些随机性,就像真人洗牌但仍然使用 Riffle 方法一样?

最佳答案

在 Aldous 和 Diaconis 的论文《洗牌和停止时间》(来自《美国数学月刊》,93:5,第 333-348 页)中,作者研究了如何需要多次洗牌才能随机化一副​​牌。该论文的第 4 部分是对 Riffle Shuffle 的分析,他们讨论了(非完美的)纸牌洗牌的一些等效公式。

特别是,他们引用了随机洗牌的模型,该模型模拟“真实”的人如何洗牌。本质上,这副牌根据二项式分布被分成两部分,将 c 卡放在一只手上,将 n-c 放在另一只手上。然后,这些牌将“以与数据包大小成正比的概率从给定手中掉落”。

因此,一个简单的应用程序是假设您的牌组最初被分成两个相等的部分,然后以 a/(a+b) 的概率重复从哪张牌中选择下一张牌它来自尺寸a的 block 和当前尺寸b的 block 的b/(a+b)概率。

关于algorithm - 具有随机性的 Riffle 洗牌算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21039928/

相关文章:

c - 当每个文档可以采用两种类型之一时,如何生成文档集的所有可能排名?

Javascript 最小公倍数函数对于非常大的数字失败

python - 如何正确采样截断分布?

algorithm - 按字典顺序升序排序的日期字符串格式按时间顺序降序?

algorithm - 我可以降低它的计算复杂度吗?

ruby-on-rails - 如何对哈希的分层数组进行排序

java - 如何从二维坐标和种子中获取随机数?

java - 令人困惑的随机生成器代码

c++ - 随机化/修改数组

java - 如何从给定范围内选择随机值