问题标签 [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 投票
5 回答
3540 浏览

ruby - 随机化数组元素

我有一个数组@number = [1,2,3,4,5,6,7,8,9]
现在,我想随机化数组内容......例如:[5,3,2,6,7,1,8]
请指导我如何继续它。

0 投票
5 回答
1480 浏览

algorithm - 重复有偏差的随机洗牌会减少偏差吗?

我想以最小的偏差反复产生快速的随机洗牌。

众所周知,只要底层随机数生成器 (RNG) 是无偏的, Fisher-Yates 洗牌就是无偏的。

但是,如果 RNG 有偏差(但速度很快)怎么办?

假设我想生成一个包含 25 个元素的数组的许多随机排列。如果我使用带有偏差 RNG 的 Fisher-Yates 算法,那么我的排列将会有偏差,但我相信这假设 25 元素数组在每次应用 shuffle 算法之前从相同状态开始。例如,一个问题是,如果 RNG 只有 2^32 ~ 10^9 的周期,我们不能产生 25 个元素的所有可能排列,因为这是 25!~ 10^25 排列。

我的一般问题是,如果我在开始 Fisher-Yates 洗牌的每个新应用之前让洗牌的元素洗牌,这会减少偏差和/或允许算法产生每个排列吗?

我的猜测是它通常会产生更好的结果,但似乎如果被反复洗牌的数组有许多与底层 RNG 相关的元素,那么排列实际上可能比预期的更频繁地重复。

有谁知道解决这个问题的任何研究?

作为一个子问题,如果我只想重复排列数组中 25 个元素中的 5 个,那么我使用 Fisher-Yates 算法选择 5 个元素并在进行完全洗牌之前停止怎么办?(我使用被交换的数组末尾的 5 个元素。)然后我重新开始使用之前部分洗牌的 25 元素数组来选择另一个 5 的排列。同样,这似乎比从如果底层 RNG 有偏差,则为原始 25 元素数组。对此有什么想法吗?

我认为测试部分洗牌情况会更容易,因为 25 个元素中的 5 个只有 6,375,600 种可能的排列,那么是否有任何简单的测试可用于检查偏差?

0 投票
6 回答
15267 浏览

python - 从 NumPy 数组中随机选择单元格 - 无需替换

我正在 NumPy 中编写一些建模例程,这些例程需要从 NumPy 数组中随机选择单元格并对它们进行一些处理。必须选择所有单元格而不进行替换(例如,一旦选择了一个单元格,就不能再次选择它,但最后必须选择所有单元格)。

我正在从 IDL 过渡,在那里我可以找到一个很好的方法来做到这一点,但我认为 NumPy 也有一个很好的方法来做到这一点。你有什么建议?

更新:我应该说我正在尝试在 2D 数组上执行此操作,因此得到一组 2D 索引。

0 投票
4 回答
1293 浏览

c# - c#二十一点 - 需要帮助

这个 C# 程序应该是一个二十一点程序,但我需要“洗牌”卡并只显示“手”

其余的我认为我可以管理...有人可以帮助我吗?

0 投票
4 回答
15480 浏览

algorithm - 这种洗牌算法有什么问题(如果有的话),我怎么知道?

就像背景一样,我知道Fisher-Yates完美洗牌。这是一个很好的洗牌,它的 O(n) 复杂性和保证的一致性,如果不使用它我会很傻......在允许就地更新数组的环境中(所以在大多数情况下,如果不是全部,命令式编程环境)。

遗憾的是,函数式编程世界并没有让您访问可变状态。

然而,由于 Fisher-Yates,我找不到很多关于如何设计洗牌算法的文献。少数几个完全解决这个问题的地方在说,实际上,“所以这里是Fisher-Yates,这是你需要知道的所有洗牌”。最后,我不得不提出自己的解决方案。

我想出的解决方案可以像这样对任何数据列表进行洗牌:

  • 如果列表为空,则返回空集。
  • 如果列表有单个项目,则返回该单个项目。
  • 如果列表非空,则使用随机数生成器对列表进行分区,并将算法递归地应用于每个分区,组合结果。

在 Erlang 代码中,它看起来像这样:

(如果这对你来说看起来像是一种疯狂的快速排序,那么基本上就是这样。)

所以这是我的问题:同样的情况使得寻找不是 Fisher-Yates 的洗牌算法变得困难,这使得寻找分析洗牌算法的工具同样困难。我可以找到很多关于分析 PRNG 的均匀性、周期性等方面的文献,但没有很多关于如何分析 shuffle 的信息。(事实上​​,我在分析 shuffle 时发现的一些信息完全是错误的——很容易通过简单的技术被欺骗。)

所以我的问题是:我如何分析我的洗牌算法(假设random:uniform()调用那里的任务是生成具有良好特性的适当随机数)?我可以使用哪些数学工具来判断,例如,在 1..100 范围内的整数列表上运行 100,000 次洗牌器是否给了我合理的好洗牌结果?我自己做了一些测试(例如,比较随机播放中的增量和减量),但我想知道更多。

如果对洗牌算法本身有任何见解,那也将不胜感激。

0 投票
4 回答
29006 浏览

java - 为什么 Collections.shuffle() 对我的数组失败?

为什么我的代码不起作用?

结果是:0 1 2 3 4 5 6 7 8 9。

我期待一个随机打乱的序列

0 投票
3 回答
141 浏览

c# - 无效的阵列混洗器

我正在尝试对数组进行洗牌,但我这样做的方式大约每五次才有效。如果有人能解释为什么它不能正常工作并可能提出调整,我将不胜感激。

0 投票
3 回答
28009 浏览

c++ - 洗牌一副牌

我正在为 C++ 程序制作一个 Deck 类。它需要有两种方法:一种是从牌堆顶部弹出一张牌,另一种是洗牌。我关心的是后者。

卡片表示为整数 1 到 52(包括 1 到 52)。洗牌最快的算法是什么(假设随机性“好”水平)?

0 投票
6 回答
772 浏览

ruby - 请帮助我在 ruby​​ 中的“shuffle”代码

这是问题

随机播放。既然您已经完成了新的排序算法,那么相反呢?编写一个 shuffle 方法,该方法接受一个数组并返回一个完全打乱的版​​本。和往常一样,你会想测试它,但测试这个比较棘手:你如何测试以确保你得到一个完美的洗牌?你甚至会说完美的洗牌会是什么?现在测试一下。

这是我的代码答案:

我的错误是什么?为什么这段代码不起作用?

0 投票
1 回答
1276 浏览

java - 我如何在java中用二维数组完成这个问题?

大家好,我正在阅读 Java 编程简介这本书,其中一个练习是:

经验洗牌检查。运行计算实验以检查我们的改组代码是否像宣传的那样工作。编写一个程序 ShuffleTest,它接受命令行参数 M 和 N,对大小为 M 的数组进行 N 次混洗,在每次混洗之前用 a[i] = i 初始化,并打印一个 M×M 表,使得第 i 行给出所有 j 的 i 在位置 j 结束的次数. 数组中的所有条目都应接近 N/M。

现在,这段代码只输出一个零块......

我究竟做错了什么?:(

谢谢