我怎样才能确保当我洗牌时我仍然能得到均匀的排列?

2023-11-23

I'm interested making an implementation of the 14-15 puzzle: alt text

我正在创建一个数组,其值按升序排列为 0 - 15:

S = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }

现在,我想做的是将它们洗牌以创建拼图的新实例。然而,我知道,如果我创建一个具有“奇数排列”的棋盘,那么它是无法解决的。

维基百科说我需要创建具有均匀排列的谜题。我相信这意味着我只需确保进行偶数次交换?

我将如何修改 Fisher-Yates 以便确保最终得到均匀的排列?如果我对数组中的每个元素进行交换,则将进行 16 次交换,我相信这将是一个偶数排列。但是,我需要担心与自身交换吗?还有其他方法可以确保我有一个有效的谜题吗?


您应该能够使用 Fischer-Yates。

  • 使用 Fischer-Yates 生成随机排列。
  • 检查是否均匀。
  • 如果不是偶数,则交换排列的前两个元素。

考虑偶数排列 P = x1 x2 .... xn。

Fisher yates 以 1/n! 的概率生成 P。

它以 1/n! 的概率生成 x2 x1 ... xn。

因此上述过程生成排列P的概率是2/n! = 1/(n!/2)

n!/2 是偶数排列的数量。

因此,上述过程以相同的概率生成偶数排列。

检查排列是否为偶数:计算排列的奇偶性倒转在排列中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我怎样才能确保当我洗牌时我仍然能得到均匀的排列? 的相关文章

  • 对元素进行随机排列,使得任何元素都不应出现在其原始索引处

    我有一个对象元素列表 SourceList ResultList Expected Obj A Obj F Obj B Obj C Obj C Obj G Obj D Obj B Obj E Obj A Obj F Obj B Obj G
  • “用瓷砖填充图案”难题

    我在为基于图块的游戏编写随机关卡生成器时遇到了一个有趣的问题 我已经为其实现了一个强力求解器 但它的速度呈指数级缓慢 并且绝对不适合我的用例 我不一定要寻找完美的解决方案 我会对性能良好的 足够好 的解决方案感到满意 问题陈述 假设您拥有以
  • C# 数组列表的排列?

    我有一个 ArrayList myList 我正在尝试创建数组中值的所有排列的列表 示例 所有值都是字符串 myList 0 1 5 3 9 myList 1 2 3 myList 2 93 myList 的计数可以变化 因此它的长度事先未
  • 查找具有重复字母的单词(排列)的排名

    尽管已经发布了很多关于这个问题的文章 但我还是发布了此内容 我不想发布答案 因为它不起作用 这篇文章的答案 查找给定字符串在所有可能的重复排列列表中的排名 https stackoverflow com questions 17620694
  • 使用 Tensorflow 对象检测 api 打乱训练数据集

    我正在使用 Faster RCNN 模型和 Tensorflow 对象检测 API 来开发徽标检测算法 我的数据集按字母顺序排列 因此有一百个阿迪达斯徽标 然后是一百个苹果徽标等 我希望在训练时对其进行洗牌 我在配置文件中添加了一些值 tr
  • 使用 PHP 打乱多个字符串值

    大家好 我每个问题有 4 个选项 每个字符串都带有冗长的句子 我的变量将类似于 option1 option2 option3 option4 我想像 3 2 1 4 一样随机排列这个变量顺序 或者类似地它会像随机一样随机排列函数 我以多种
  • 使用密钥的可逆洗牌算法

    我如何在 C 中编写一个可逆的洗牌算法 该算法使用密钥进行洗牌并且可 以反转到原始状态 例如 我有一个字符串 Hello world 如何对其进行洗牌 以便稍后我可以将洗牌后的字符串反转回 Hello world Look at 费舍尔 耶
  • 如何判断拼图是否完成?

    我正在准备一款像拼图这样的小游戏 为此我在布局中使用了 9 个图像视图和 9 个不同的图像 在启动时将图像设置为 imageview 这些是实际图像 随机播放后用户将滑动图像以完成拼图 我想检查修改后的图像与实际图像的 天气是否相等 如果它
  • 为什么与 xor 进行交换在 C++ 中工作正常,但在 Java 中却不行?一些谜题[重复]

    这个问题在这里已经有答案了 可能的重复 为什么这个语句在 java 中不起作用 x y x y https stackoverflow com questions 3844934 why is this statement not work
  • SPOJ:洗牌

    最近开始解答网上评委的问题 我被困在SPOJ 中的这个问题 http www spoj pl problems CODESPTC 下面是洗 N 张牌的算法 这些牌被分成 K 个相等的牌堆 其中 K 是 N 的因数 底部的 N K 张牌按相同
  • Haskell 生成预过滤排列

    有没有办法生成预过滤的排列 而不是这样做 filter condition permutations list 排列函数可以短路 例如 perms perms xs i j i lt xs j lt perms delete i xs 我尝
  • 如何在 MATLAB 中随机排列 3D 矩阵中的列

    我有 3D 矩阵 10000 x 60 x 20 我需要排列第二维和第三维以保持列完整 对于 2D 矩阵 我使用 RANDPERM pidx randperm size A 2 Aperm A pidx 我不能只应用 RANDPERM 两次
  • 列出具有重复字母的字符串的唯一排列的算法

    例如 字符串 AAABBB 将具有排列 阿巴巴 巴巴巴 阿巴巴 ETC 生成排列的好算法是什么 它的时间复杂度是多少 这不是完整的答案 只是一个想法 如果您的字符串的固定数量只有两个字母 我将使用二叉树和良好的递归函数 每个节点都是包含名称
  • 是否存在可以生成所有可能排列的交换序列? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 给你一个数字列表1 2 n 是否有一
  • 红宝石来整理单词[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在尝试编写一个 ruby 脚本来解读排列的单词 生成所有排列 并在 txt 目录中搜索该单词 我遇到了问题 这是我所拥有的简单概述 pr
  • 朴素洗牌的现实问题

    我正在写一些文章 旨在通过使用与扑克相关的主题来教授入门编程概念 目前 我正在研究洗牌的主题 As 杰夫 阿特伍德 Jeff Atwood 在 CodingHorror com 上指出 http www codinghorror com b
  • BASH - 随机排列文件中字符串中的字符

    我有一个文件 filename txt 具有以下结构 gt line1 ABC gt line2 DEF gt line3 GHI gt line4 JKL 我想打乱字符串中的字符not开始机智 gt 输出将 例如 如下所示 gt line
  • 从具有重复元素的向量生成所有独特的组合

    这个问题之前曾被问过 但仅适用于具有非重复元素的向量 我无法找到一个简单的解决方案来从具有重复元素的向量中获取所有组合 为了说明这一点 我在下面列出了一个例子 x lt c red blue green red green red 向量 x
  • 不分配内存的重复排列

    我正在寻找一种算法来生成列表中重复 4 个元素 长度 2 1000 的所有排列 Java实现 http en literateprograms org Permutations with repetition 28Java 29 问题是上面
  • 快速约会算法

    我在一家咨询公司工作 大部分时间都在客户所在地 正因为如此 我很少见到同事 为了更好地了解彼此 我们将安排一个晚宴 会有很多小桌子 方便人们聊天 为了在聚会期间与尽可能多的不同的人交谈 每个人都必须每隔一段时间 比如每小时 换一张桌子 如何

随机推荐