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

2024-02-20

我有一个对象元素列表

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                 Obj_E

随机排列元素来源列表这样,任何元素都不应该出现在其原始索引处(在来源列表) in 结果列表.

例如,在来源列表C 位于索引 2,因此它一定不能位于以下索引中的索引 2结果列表

到目前为止,我已经研究过混乱维基 http://rosettacode.org/wiki/Permutations/Derangements#Java,但 algo 给了我可能的安排,而我只需要一个。


您可以使用费希尔-耶茨洗牌 http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle作为一个黑匣子,并反复洗牌你的数组,直到你的结果是一个排列。

伪代码:

while true:
     arr = [1,2,...,n]
     shuffle(arr)
     flag = true
     for i from 0 to n:
        if arr[i] == i: //not a dearrangement
           flag = false 
     if flag == true: //it's a dearrangement
        break

shuffle(arr): //fisher yates
    for i from 0 to n:
       j = rand(i,n)
       swap(arr,i,j)

该方法的特点:

  • 这保证是统一且公正,因为每个有效的重排 在每次迭代中获得完全相同的赔率。
  • 由于 Fisher-Yates 生成所有排列,并且我们仅使排列无效 -每一次调整都是可以实现的.
  • The probability to get a dearrangement is 1/e1, this means you are going to need (1-1/e)^-1 ~=1.56 shuffles on the average case, which means this algorithm runs in O(n) expected time complexity.

(1) 精神错乱的数量 http://en.wikipedia.org/wiki/Derangement#Counting_derangements is int(n!/e + 1/2),这意味着数组发生重新排列的概率为(n!/e + 1/2)/n! ~= 1/e,对于较大的值n.

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

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

  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • Spark:Shuffle Write、Shuffle 溢出(内存)、Shuffle 溢出(磁盘)之间的区别?

    我有以下 Spark 工作 试图将所有内容保留在内存中 val myOutRDD myInRDD flatMap fp gt val tuple2List ListBuffer String myClass ListBuffer tuple
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 我可以有效地从 HashSet 中随机采样吗?

    我有一个std collections HashSet 我想采样并删除一个均匀随机的元素 目前 我正在做的是使用随机抽样索引rand gen range 然后迭代HashSet到该索引来获取元素 然后我删除选定的元素 这可行 但效率不高 有
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲

随机推荐

  • 程序如何执行?操作系统在哪里发挥作用?

    程序从某种语言编译为 ASM gt 机器代码 直接可执行 当人们说这是平台相关时 意味着形成的二进制文件只能在具有相同指令集架构 如 x86 x86 64 的 CPU 上运行 正确 由于 ISA 的差异 它可能 错误地 可能 根本 不在其他
  • Matlab套接字等待响应

    我正在尝试在 matlab 中运行以下客户端和服务器套接字示例代码 http www mathworks com help instrument using tcpip server sockets html http www mathwo
  • 模板化的operator()重载C++

    有人已经问过这个问题 但该线程最终以原始问题没有得到回答 假设你有这个 template
  • Dart Isolates 的暂停功能未按预期工作

    我一直在玩飞镖分离物 https api dartlang org stable 1 24 3 dart isolate Isolate class html并在使用时遇到了问题isolate pause 功能 import dart io
  • 在 Web 应用程序中的何处存储数据库凭据?

    我想知道您使用什么技术来存储应用程序的数据库凭据 我特别关心 java webapps 但我认为没有必要将问题限制于此 需要考虑的事情 您是否使用属性文件 xml 配置文件或其他文件 它是捆绑到您的应用程序中 即在 jar 文件中 还是单独
  • com.google.android.gms.maps.MapFragment:无法解析符号“地图”

    我已遵循此处的所有指示 没有任何问题 https developers google com maps documentation android start getting the google maps android api v2 h
  • 我在 Nhibernate Query Over fetch 上做错了什么吗?

    我有这个 using ITransaction transaction session BeginTransaction Task tAlias null CompletedTask cAlias null List
  • 从 D 中的字符串获取普通 char*?

    我正在尝试弄清楚如何从 D 字符串 不可变 char 获取普通的可变 C 字符串 char 以便将字符数据传递给遗留的 C 代码 toStringz 不起作用 因为我收到一条错误 说我 无法将 immutable char 类型的表达式 t
  • 在 Python 中切片字符串时如何使用变量作为索引?

    我一直在尝试使用循环从字符串中切出两个字符 但它不是抓取两个字符 而是只抓取一个 我试过了 input i i 1 and input i i 1 但似乎都不起作用 如何使用变量进行切片 完整的例程 def StringTo2ByteLis
  • 查看netbeans中的执行线

    当我按下运行程序按钮 向右指向的绿色箭头 时 如何查看 netbean v6 8 用于执行我的 java 应用程序的执行行 我正在寻找类似的东西 java cp 构建 类主要 我正在尝试从 15 年使用 vi 编写 c 和 c 转向 jav
  • iPhone iOS 5.0 OpenGl ES 2.0

    说真的 我已经花了几周甚至几个月的时间来寻求有关 iPhone 上使用 XCode 4 2 的 OpenGL 的一些认真帮助 我需要一个很好的教程 介绍如何从使用新的 XCode 4 2 的 OpenGL 游戏 模板开始 然后从那里开始进展
  • Chrome 不支持 css @page?

    我有用于打印的CSS 就像这样简单 page top left content TOP SECRET color red bottom center content counter page font style italic 但Chrom
  • 如何使用 Riverpod 在 Flutter 中刷新 FutureProvider 而无需再次显示加载指示器?

    目前我正在刷新一个 FutureProvider 它负责从 Firebase 获取数据并将其显示在一个简单的 ListView 中液体拉动刷新 https pub dev packages liquid pull to refresh包 这
  • JavaScript:那个与这个

    我试图更好地理解 JavaScript 中 that 和 this 的用法 我在这里关注 Douglas Crockford 的教程 http javascript crockford com private html http javas
  • 按行拆分数据框并另存为 csv

    我只有一个数据框 想要按行分割数据框 将几个新数据框分配给新变量并将它们保存为 csv 文件 a lt rep 1 5 each 3 b lt rep 1 3 each 5 c lt data frame a b a b 1 1 1 2 1
  • 将 zip 文件解压到本地文件夹

    我有带有 Express 的节点应用程序 我从邮递员等客户端发送请求 我需要从req并将其解压到我的本地文件夹中 我该怎么做 我找到了以下开源但不知道如何获取req body并将其提取到我的本地文件夹中 例如 C Test extractD
  • Selenium WebDriver + Tor 作为 Stem 的代理?

    我需要确认是否可以使用 Stem 启动公开 127 0 0 1 port 的 Tor 进程 然后在 selenium 脚本上使用它作为代理 SOCKS 我正在使用 Python 3 4 2 Stem 1 3 0 和 Tor tor win3
  • 如何在 IPython jupyter 笔记本中传递命令行参数

    我是 Ipython 的新手 目前我已经使用 Anaconda 安装了 Ipython 并编写了使用 jupyter Notebook UI 绘制图表的代码 我想在 argparse 模块的帮助下将一些参数传递给我的工作脚本 下面是代码 i
  • 从 Python AST 生成 .pyc?

    如何从 Python AST 生成 pyc 文件以便可以从 Python 导入该文件 我用过compile创建一个代码对象 然后编写co code属性到文件 但是当我尝试从 Python 导入文件时 我得到一个ImportError Bad
  • 对元素进行随机排列,使得任何元素都不应出现在其原始索引处

    我有一个对象元素列表 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