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

c# - 使用 IComparer 随机播放

首先,我知道Fisher-Yates shuffle。但是,为了争论,我想允许用户从下拉列表中选择一个排序选项。该列表将包括一个“随机”选项。根据他们的选择结果,我只想用 IComparer 实例替换我的排序。IComparer 会是什么样子?

谷歌提出了大量有缺陷的结果,它们都采用这种形式:

但是,这种实现是有偏见的,在某些情况下甚至会抛出异常。偏差可以用下面的代码来证明:

那么如何实现一个随机IComparer<T>的来解决这些问题呢?允许要求每次调用都.Sort()使用单独的 IComparer 实例,因为我看不到任何其他方法可以做到这一点:必须使用其他一些真正随机的值来比较项目但该值也必须与项目一致在给定的排序操作中。

我在这里有一个开始,但它是匆忙发布的,非常慢,甚至没有返回所有可能的类型(测试表明它至少消除了偏见,如果你不计算缺失的选项)。我不希望像 Fisher-Yates 那样的 O(n) 性能,但我确实想要一些合理的东西(n log n 表示小的 n),我确实希望它能够显示所有可能的类型。不幸的是,该链接是该问题的当前公认答案,因此我希望能够用更好的东西替换它。

如果不出意外,我希望这能吸引所有那些寻找 IComparable 解决方案的谷歌查询——他们最终会在这里而不是在其他地方告诉他们使用不正确的版本。

0 投票
4 回答
1901 浏览

random - 生成具有 256 个随机位的数字的最佳方法?

生成具有 256 个随机位的数字的最佳方法是什么?

连接随机字节是否有效?

此外,使用不重复的这些数字对一副牌进行排序是否合适?

0 投票
4 回答
1160 浏览

bit-manipulation - 位旋转重新排序

我需要对 7 位值进行任意重新排序(是的,我知道我应该使用表格)并且想知道是否有任何位黑客可以做到这一点。

例子:


编辑:我在想一些类似 东西

只是为了踢球,因为我是 AFTK,所以我正在尝试蛮力搜索以下形式的解决方案:

未找到解决方案。

0 投票
5 回答
1613 浏览

unit-testing - 测试概率函数

我需要一个以随机顺序返回数组的函数。我想确保它是随机的,但我不知道如何编写测试以确保数组确实是随机的。我可以多次运行代码,看看我是否多次得到相同的答案。虽然大型阵列不太可能发生冲突,但小型阵列(例如两个元素)很可能发生冲突。

我应该怎么做?

0 投票
4 回答
3674 浏览

javascript - 随机化数组中的元素?

我为我的一位艺术家朋友创建了一个网站,她希望布局保持不变,但她也希望将她制作的新画作混合到当前布局中。所以我在主画廊页面上有 12 个缩略图(thumb1 - thumb12)和 18 个图像(img1 - img18)要放置

我想到的方法是创建一个包含所有图像的数组,将其随机化,然后简单地刮掉前 12 个图像并将它们加载到拇指槽中。另一种方法是从数组中随机选择 12 个图像。在第一种情况下,我找不到随机化数组元素的方法。在后一种情况下,我无法思考如何防止图像多次加载,除了使用第二个数组,这似乎非常低效和可怕。

顺便说一句,我正在用 Javascript 完成所有这些工作。

0 投票
12 回答
11080 浏览

algorithm - 为什么这个简单的洗牌算法会产生有偏差的结果?什么是简单的原因?

似乎这个简单的洗牌算法会产生有偏差的结果:

你可以试试...而不是使用 52,使用 3(假设只使用 3 张卡),然后运行 ​​10,000 次并统计结果,您会发现结果偏向某些模式...

问题是......它会发生的简单解释是什么?

正确的解决方案是使用类似的东西

但问题是......为什么第一种方法,看似也是完全随机的,会使结果有偏差?

更新 1:感谢这里的人们指出它需要 rand($i, 51) 才能正确洗牌。

0 投票
11 回答
79379 浏览

linux - 如何使用 Red Hat Linux 上的标准工具随机化文件中的行?

如何使用 Red Hat Linux 上的标准工具随机化文件中的行?

我没有shuf命令,所以我正在寻找完成相同任务的类似perl或单线的东西。awk

0 投票
12 回答
55751 浏览

javascript - 使用 JavaScript Array.sort() 方法进行改组是否正确?

我正在用他的 JavaScript 代码帮助某人,我的眼睛被一个看起来像这样的部分所吸引:

我的第一个想法是:嘿,这不可能!但后来我做了一些实验,发现它确实至少似乎提供了很好的随机结果。

然后我做了一些网络搜索,几乎在顶部找到了一篇文章,其中最明显地复制了这段代码。看起来像一个相当受人尊敬的网站和作者......

但我的直觉告诉我,这一定是错的。特别是因为 ECMA 标准没有指定排序算法。我认为不同的排序算法会导致不同的非均匀洗牌。一些排序算法甚至可能无限循环......

但是你怎么看?

作为另一个问题......我现在如何去测量这种洗牌技术的结果有多随机?

更新:我做了一些测量并将结果发布在下面作为答案之一。

0 投票
24 回答
1027188 浏览

python - 打乱对象列表

我有一个对象列表,我想对它们进行洗牌。我以为我可以使用该random.shuffle方法,但是当列表是对象时,这似乎失败了。是否有洗牌对象的方法或解决此问题的其他方法?

这将失败。

0 投票
9 回答
60637 浏览

c# - C#中的洗牌

我正在尝试为一个列出一副纸牌内容的项目编写代码,询问该人想要洗牌多少次,然后将它们洗牌。它必须使用一种方法来使用 System.Random 类创建两个随机整数。

这些是我的课:

程序.cs:

甲板.cs:

枚举.cs:

卡片.cs:

请告诉我如何让卡片随机洗牌,然后列出洗好的牌。