问题标签 [fisher-yates-shuffle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2150 浏览

c++ - 费舍尔耶茨变体

经典的 Fisher Yates 看起来像这样:

昨天,我错误地“向后”实现了迭代:

这个版本是否比第一个版本更差(或更好)?它是否会扭曲结果概率?

0 投票
3 回答
677 浏览

algorithm - Knuth shuffle 的一种变体

这是一个与 Knuth/Fisher-Yates shuffle 相关的非常困难但有趣的概率问题。

当对每个元素进行循环时,将当前元素与整个数组中的任何随机元素(不在左边的元素内)进行交换,那么原始第 i个元素在第 j位置结束的概率是多少?

0 投票
2 回答
332 浏览

javascript - Fisher-Yates 算法解释?

我想知道你们中的一些人是否了解 Fisher-Yates shuffle 的工作原理并可以向我解释。所以我在网上找到了这个 Fisher-Yates Shuffle 代码:

该代码完美运行,但我仍然感到困惑

  1. 我将循环更改为“input.length”,但效果不佳,有时我仍然得到“0”值。我不知道为什么要使用“input.length-1”而不是“input.length”
  2. 在 randomize 部分,为什么我要将索引从 0 随机化到值 (i+1),我们为什么不直接将它从 0 随机化到 (i) 呢?

如果你们中的一些人理解它,你能解释一下吗?太感谢了

0 投票
0 回答
114 浏览

python - 费雪-耶茨洗牌

np.random.permutation我写信询问使用 Fisher-Yates 洗牌算法对数据集进行洗牌与使用以下代码片段相比有什么区别:

0 投票
1 回答
210 浏览

javascript - 如何使用 Fisher-Yates Shuffle 对 TypeScript 中的数组进行洗牌?

我正在尝试使用 TypeScript 编写测验。提出的问题应该随机挑选,我正在使用 Fisher-Yates Shuffle 来做到这一点——但它不会随机选择它们。

我究竟做错了什么?Fisher-Yates Shuffle 出现在问题之后。

0 投票
2 回答
145 浏览

arrays - Lua:如何打乱数组中的某些元素?

如果我有一个 5 个字符串的表,但我只想随机播放第二个、第三个和第四个,我该怎么做?

Question = {“question here”,”resp1”,”resp2”,”resp3”,”answer”}

我只想将 resp1、resp2 和 resp3 洗牌。

0 投票
0 回答
31 浏览

algorithm - Knuth/Fisher-yates算法有哪些应用

该算法保证以均匀随机顺序重新排列元素。均匀随机是什么意思?

0 投票
0 回答
50 浏览

javascript - Fisher Yates 添加重复项

我正在尝试洗牌 6 个 T 和 6 个 A 并循环直到到达数组的末尾。但是,当我循环播放时,我不断显示不均匀数量的 T 和 A。我是 javascript 新手,不确定问题是否与随机播放或循环有关。

0 投票
1 回答
40 浏览

algorithm - Fisher yates 算法没有产生无偏的结果

维基百科上描述的 Fisher yates 算法是

该算法产生一个无偏的排列:每个排列都是同样可能的。

我浏览了一些文章,这些文章解释了一个朴素的和 Fisher yates 算法如何产生一组有偏见和无偏见的项目组合。

链接到文章

Fisher-Yates Shuffle – 每个开发人员都应该知道的算法

随机性很难:学习 Fisher-Yates shuffle 算法和随机数生成

文章继续展示了这两种算法的几乎无偏见和非常有偏见的结果图。我试图重现概率,但我似乎无法产生差异。

这是我的代码

这会产生以下结果

在这两种情况下,我的结果并没有太大的不同。我的问题是,我的实现错了吗?还是我的理解有误?

0 投票
0 回答
48 浏览

javascript - 改变 Fisher-Yates 洗牌,使一个值永远不会在它开始的同一个地方结束

我有一个对象数组,其中一个示例如下所示:

在我的 HTML 中,我有一个复选框。如果选中该框,我可以使用 shuffle 函数导致条目被随机打乱,可能会在它开始的相同位置留下一个值。但是,我尝试更改 else 语句中所示的算法会导致出现问题,并且程序会陷入无限循环。

如何正确修改算法,?