预约调度算法(N个人,N个忙闲时段,约束-满足)

2023-12-27

问题陈述

我们有一位雇主想要面试 N 个人,因此安排了 N 个面试时段。每个人都有一个空闲/忙碌的时间表。给出一个算法,如果可能的话,将 N 个人安排到 N 个位置,如果不可能,则返回一个标志/错误/等。最快的运行时复杂度是多少?

到目前为止我的方法

天真:有N个!安排N个人的方法。遍历所有这些,对于每个排列,检查它是否可行。在! )

回溯:

  1. 寻找只能有 1 人参加的面试时段。安排该人员,将其从候选人列表中删除并删除空位。
  2. 寻找只能进入 1 个位置的候选人。安排该人员,将其从候选人列表中删除并删除空位。
  3. 重复1和2,直到不再有类似的组合。
  4. 选择一个人,将他们随机安排到一个可用的位置。记住这个操作。
  5. 重复1、2、3,直到我们有一个时间表或存在无法解决的冲突。如果我们有时间表,请将其返回。如果有无法解决的冲突,就原路返回。

我认为这是 O( n! ) 最坏情况 - 这也好不到哪去。

可能有一个 D.P.解决方案以及 - 但我还没有看到它。

其他想法

该问题可以用 NxN 矩阵表示,其中行是“槽”,列是“人”,值“1”表示空闲,“0”表示忙碌。然后,我们在这个矩阵中寻找行列交换的单位矩阵。步骤 1 和 2 是查找只有一个“1”的行或列。 (如果矩阵的秩=N,则表示有解,但反之则不成立) 另一种看待它的方法是将矩阵视为未加权的有向图边缘矩阵。然后,每个节点代表 1 个候选者和 1 个槽。然后,我们寻找一组边,以便图中的每个节点都有一个传出边和一个传入边。或者,如果有 2x 个节点,它将是一个二分图。

矩阵示例:

1 1 1 1
0 1 1 0
1 0 0 1
1 0 0 1

正如您所指出的,这个问题相当于在二部图中找到最大匹配的问题(一组顶点是人的集合,另一组顶点是槽的集合,人和槽之间有一条边如果此人可以胜任该时段)。

这个问题可以通过以下方法解决Hopcroft-Karp算法 http://en.wikipedia.org/wiki/Hopcroft%E2%80%93Karp_algorithm.

最坏情况下的复杂度为 O(n^(5/2)),如果图稀疏,则更好。

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

预约调度算法(N个人,N个忙闲时段,约束-满足) 的相关文章

  • Python:for 循环 - for i in range(0,len(list) 与 for i in list

    这是一个非常简单的Python 力学问题 为什么我不能只说 for i in range original list 而不是 for i in range 0 len original list 人们通常使用范围而不是前者吗 谢谢 If I
  • 将整数列表划分为总和相等的 K 个子列表

    类似的问题还有1 https stackoverflow com questions 27322804 partition of a set into k disjoint subsets with equal sum and 2 http
  • 用于基本要素匹配的最坏情况 NlogN 算法

    查找两个相同大小数组的元素之间的唯一映射 https stackoverflow com questions 4411940 find the unique mapping between elements of two same size
  • Python 中的空填字游戏求解器

    我得到了一个包含填字游戏蓝图的矩阵 当然 它是空的 我们的目标是填补整个难题 这是 Checkio 的一项任务 我已经为此奋斗了相当长一段时间 根据我对复杂性的理解 这个问题没有完美的算法 不过 必须有最好的方法来做到这一点 对吧 我尝试了
  • 如何使 R barplot 上的列标签变为斜体

    这可能是一个简单的问题 但是如何仅将条形图上的列标签设为斜体 而不是斜体x axis标签 但列标签是专门的 到目前为止我的代码是 bp barplot means names arg c CON TRI ylim c 0 120 ylab
  • 处理流星中的长服务器端计算

    我正在使用 jimp https www npmjs com package jimp https www npmjs com package jimp 在meteor JS中生成图像服务器端 换句话说 我正在使用递归算法 计算 图像的像素
  • 查找文本中所有关键字的有效算法

    我有很多字符串 其中包含许多不同拼写的文本 我通过搜索关键字来标记这些字符串 如果找到关键字 我将使用该关键字的关联文本 假设搜索字符串可以包含文本 schw schwa 和 施瓦茨 我有三个关键字 全部解析为文本 schwarz 现在我正
  • 填充体积算法

    我有一个具有一定尺寸长度 宽度 高度的盒子 我有不同长度 宽度 高度的物品 是否有现有的算法可以确定放入盒子中的最佳物品 这称为装箱 切割库存 背包问题 并且是 NP 难问题 一般来说 您只能通过使用启发式方法获得近似解 请参见示例 htt
  • 计算字符串的所有子串中子序列的出现次数

    我想编写一个算法来计算字符串的所有子字符串中字符子序列 不相交 出现的总数 下面是一个例子 字符串 jabcohnnyjohnny 后续 约翰尼 包含子序列的子字符串 jabcohnny jabcohnnyj jabcohnnyjo jab
  • 从原点开始在离散 2D 网格上迭代向外螺旋的算法

    例如 这是预期螺旋的形状 以及迭代的每个步骤 y 16 15 14 13 12 17 4 3 2 11 18 5 0 1 10 x 19 6 7 8 9 20 21 22 23 24 其中线条是 x 轴和 y 轴 以下是算法每次迭代 返回
  • 线段树java实现[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 你知道 二进制 的良好实现吗线段树 http en wikipedia org wiki Segmen
  • 定点数学比浮点运算快吗?

    多年前 即 20 世纪 90 年代初期 我构建了图形软件包 该软件包基于定点算术和预先计算的 cos sin 表格以及使用牛顿近似方法进行 sqrt 和对数近似的缩放方程来优化计算 这些先进技术似乎已经成为图形和内置数学处理器的一部分 大约
  • Python Pandas:沿一列比较两个数据帧,并返回另一个数据帧中两个数据帧的行内容

    我正在处理两个 csv 文件并作为数据框 df1 和 df2 导入 df1 有 50000 行 df2 有 150000 行 我想将 df2 的 时间 与 df1 求时间差并返回所有列的值 对应相似的行 保存在df3中 时间同步 例如 35
  • 什么是“朴素”算法,什么是“封闭式”解决方案?

    我有一些关于描述算法时使用的术语语义的问题 首先 朴素 算法是什么意思 这与给定问题的其他解决方案有何不同 解决方案还可以采取哪些其他形式 其次 我听到很多人提到 封闭式 解决方案 我也不知道这意味着什么 但在尝试解决递归关系时经常会出现
  • 绘制点之间的所有线

    我有以下 R 代码 x lt c 0 01848598 0 08052353 0 06741172 0 11652034 y lt c 0 4177541 0 4042247 0 3964025 0 4074685 d lt data fr
  • 当给定块大小时反转单链表

    有一个单连接链表 并给出了块大小 例如 如果我的链表是1 gt 2 gt 3 gt 4 gt 5 gt 6 gt 7 gt 8 NULL我的块大小是4然后反转第一个4元素 然后是第二个 4 个元素 问题的输出应该是4 gt 3 gt 2 g
  • 坐标算法 - 绕中心旋转

    通过查看这张图片 我想您会很好地理解我的问题 图片已删除 网址不再有效 现在返回广告 所以基本上我想要一个函数 它接受一个对象作为参数 并根据我之前添加的对象数量为该对象提供正确的坐标 假设我将所有这些对象添加到一个数组中 objectAr
  • 如何在C中实现带连分数的自然对数?

    这里我有一个小问题 根据这个公式创建一些东西 这就是我所拥有的 但它不起作用 弗兰基 我真的不明白它应该如何工作 我尝试用一 些错误的指令对其进行编码 N 是迭代次数和分数部分 我认为它会以某种方式导致递归 但不知道如何 谢谢你的帮助 do
  • 如何在 MATLAB 中绘制 3D 曲面图?

    我有一个像这样的数据集 0 1 0 2 0 3 0 4 1 10 11 12 13 2 11 12 13 14 3 12 13 14 15 4 13 14 15 16 我想在 matlab 中绘制 3D 曲面图 使列标题位于 y 轴 行标题
  • 如何光栅化旋转矩形(通过 setpixel 在 2d 中)

    我有四个 2d 顶点 A B C D 的旋转矩形 我需要在像素缓冲区中 有效地 光栅化 绘制它 使用 setpixel x y 颜色 怎么做 我正在尝试使用一些代码 例如 convertilg a b c d do up down left

随机推荐

  • SharePoint 在线 OAuth2 令牌 invalid_scope

    我正在尝试为我注册的 Azure AD 应用程序获取不记名令牌 以通过 API 读取我的所有共享点网站 我按照微软的指南进行了操作 授予应用程序权限 https learn microsoft com bs latn ba azure ac
  • 使用谷歌翻译脚本翻译的页面中的 SvG 元素抛出错误

    我在页面中使用 SVG 元素 当将页面转换为德语时 我在控制台中遇到以下脚本错误 错误 未捕获类型错误 a b target className indexOf 不是 功能 有人有解决方案吗 这与在 Chrome 中安装 Google Tr
  • 隐藏 PHP / MySQL 错误消息

    我有一个基于X Cart http www x cart com 运行良好 但是 当我转到该地址 手动访问链接 时www mysite com Xx
  • 我们对 JS 中的箭头函数优化有任何保证吗?

    假设我们有下一个函数 const x a gt a const result x hello 我们在 Google V8 Firefox Quantum 中是否有任何保证 x将被优化为const result hello 我为什么要问它 请
  • 在 Postgres 中将表行的子集从一个数据库复制到另一个数据库的最佳方法是什么?

    我有一个生产数据库 比如说有一千万行 我想从过去一小时的生产中提取大约 10 000 行 并将它们复制到我的本地盒子中 我怎么做 假设查询是 SELECT FROM mytable WHERE date gt 2009 01 05 12 0
  • 在 R 数据框中按组应用计算

    我有这样的数据 object category country 495647 1 RUS 477462 2 GER 431567 3 USA 449136 1 RUS 367260 1 USA 495649 1 RUS 477461 2 G
  • Github - 有时无法通过 ssh 连接

    情况 我正在使用Linux 薄荷伴侣17 2 当通过 ssh 推送到 github 时 有时连接会失败 通常会在重新启动计算机和网络后恢复 几天后 可能又变坏了 很混乱 通过http推送从来没有这样的问题 但它需要密码 不太方便 调试信息
  • FHSTwitterEngine - 'NSInvalidArgumentException','数据参数为零'

    我正在使用 FHSTwitterEngine 将 gif 发布到 twitpic 当我的 iPhone 上有 wifi 或 3G 连接时 一切正常 但我还想在没有连接或上传失败时实现一些错误处理 因此 为了进行测试 我将 iPhone 置于
  • 连接两个表的表是否应该有自己的ID?

    我有两张桌子 First id name Second id name 另一张表连接前两个表 Third first id second id 第三张桌子在那里only解决M N问题 应该有自己的ID吗 如果表仅包含两个外键 则没有理由拥有
  • Mybatis 嵌套一对一或一对多关系映射

    我使用 myBatis 来映射一个简单的数据库 作为示例 它由4个型号组成 User Car Tariff 保险 User has 私人列表 carList and 私人关税关税以及其他一些带有 getter 和 setter 的字段 Ca
  • 如何识别特定时间范围内发生的行?

    我有一张表 其中包含患者的医院就诊情况 我正在尝试标记上次访问后 90 天内发生的访问 然而 需要注意的是 一旦一次访问被标记为重叠访问 该访问就不应用于评估与另一次访问的重叠 让我用一个例子来解释一下 Table visitID pati
  • 数据注释 - 使用属性扩展并将正则表达式存储在资源文件中

    我目前正在与MVC4数据注释来处理验证 我正在开发一个非常国际化的网站 因此我将所有文本保存在资源文件中 我还想在资源文件中保留用于验证的正则表达式 以便我可以使用相同的代码进行检查 例如 邮政编码 英国 and 邮政编码 美国 只需使用不
  • PropertyDescriptor和WPF绑定机制

    背景 我正在调查一些代码并遇到一个包含DataGrid有一些绑定列 Binding Binding calc from 我到处搜索 但没有包含名为的属性的类calc from 然后我偶然发现了一些PropertyDescriptor类 我认
  • 为什么 C# 7 ValueTuples 实现 Equals 方法而不是双等于运算符?

    考虑以下代码片段 var tuple1 7 foo var tuple2 7 foo var tuple3 42 bar Assert That tuple1 Equals tuple2 Is True This passes Assert
  • Java - Future.get() 多次调用

    Java 是如何实现的Future get 任务完成后多次调用的情况下表现如何 它返回相同的结果吗 或者抛出一个ExecutionException如果计算失败 一次又一次出现相同的异常 我在文档中找不到任何有关它的内容 您可以致电get
  • Android源代码不工作,通过glReadPixels读取帧缓冲区

    我是 Android 开发新手 有一项任务是在指定的时间间隔后读取帧缓冲区数据 我想出了以下代码 public class mainActivity extends Activity Bitmap mSavedBM private EGL1
  • 我应该使用哪种依赖注入工具? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 Spring 按需创建 Bean

    我想在启动后以工厂模式创建一些 spring beans 例如 我经常有一些工作要做 并且需要创建一个任务 bean 它可能依赖于其他单例 spring bean 并执行它 可能有多个工作要同时执行 因此每个任务 bean 都需要是独立的
  • 第一个 DropDownList 更改后如何从数据库加载第二个 DropDown 列表

    我正在构建一个网络应用程序 在某些时候 用户需要将数据输入到表单中 该表单有几个文本字段和DropDownLists 其中一个 DDL 依赖于其先前的 DDL 发生的情况是 当用户从第一个 DDL 中选择一个值时 第二个 DDL 应该从数据
  • 预约调度算法(N个人,N个忙闲时段,约束-满足)

    问题陈述 我们有一位雇主想要面试 N 个人 因此安排了 N 个面试时段 每个人都有一个空闲 忙碌的时间表 给出一个算法 如果可能的话 将 N 个人安排到 N 个位置 如果不可能 则返回一个标志 错误 等 最快的运行时复杂度是多少 到目前为止