【问题标题】:Is this MSP an instance of the TSP?这个 MSP 是 TSP 的一个实例吗?
【发布时间】:2013-08-27 02:25:15
【问题描述】:

在他的书算法设计手册中,Steven S. Skiena 提出了以下问题:

           

现在考虑以下调度问题。想象一下,您是一个需求量很大的演员,他收到了在 n 个正在开发的不同电影项目中出演的邀请。每个优惠都在拍摄的第一天和最后一天指定。要接受这份工作,您必须承诺在整个期间都有空。因此,您不能同时接受两个间隔重叠的工作。

对于像你这样的艺术家,接受工作的标准很明确:你想尽可能多地赚钱。因为这些电影中的每部都为每部电影支付相同的费用,这意味着您要寻找尽可能多的工作(间隔),这样它们中的任何一个都不会相互冲突。

例如,考虑图 1.5 [上图] 中的可用项目。我们最多可以出演四部电影,分别是“离散”数学、编程挑战、计算赌注以及 Halting State 或 Steiner's Tree 之一。

您(或您的代理)必须解决以下算法调度问题:

问题:电影调度问题

输入:一组In个区间。

输出: 可以从 I 中选择的相互不重叠区间的最大子集是什么?

我想知道,这是 TSP 的一个实例(也许是一个简化的实例)?

【问题讨论】:

  • 肯定不是 TSP。稍后您会发现一两页,这个问题可以有效地解决(不确定是否是线性时间,但最坏的情况是 Theta(n log n)),并且您稍后会发现几百页, TSP 无法有效解决。
  • @delnan,那么这个问题的分类是什么?
  • 嗯,分类是什么意思?我可以告诉你它在复杂性层次结构中的位置(至少在 P 中),但可能不是你的意思。
  • @delnan,我的意思是:这个问题从根本上归结为一个普遍的、众所周知的问题吗?我的第一个猜测是 TSP,但我现在怀疑是不是背包问题。
  • 不,由于我在第一条评论中所述的原因,任何 NP 问题都是正确的。我会说这一个“普遍的、众所周知的问题”。只是不像许多 NP 问题那样出名,因为它既不与著名的未解决问题 (P?=NP) 相关,也不在实际应用中非常常见(如排序)。

标签: algorithm traveling-salesman


【解决方案1】:

以下是解决此问题的方法:

  1. 创建一棵树,其顶点为胶片,边缘为重叠。也就是说,如果两个顶点的时间表重叠,则两个顶点由一条边连接。因此,这个问题可以重述如下:“给定一个图 G,找到未连接顶点的最大子集。”

  2. 现在可以将上述问题与已知的 NP-hard 问题联系起来。具体来说,创建一个具有相同顶点和互补边的图 G'。也就是说,如果原始图 G 没有,则 G' 在顶点之间有一条边。现在问题可以重述如下:“给定一个图 G' 找到最大团,其中团是所有顶点相互连接的子集。”

Clique 是一个众所周知的 NP-hard 问题。因为您的调度问题等同于 Clique - 瞧!这也是NP难的。

【讨论】:

  • @delnan 指出问题不在于 NP 空间。那么,他错了吗?
  • 要使这个论点起作用,你需要换个方向——取一个任意图并找到一组与之对应的电影。然而,这是不可能的,事实上,提问者的问题有一个多项式时间的解决方案。
  • 你是对的,菜鸟的错误,走反了。 :(
  • 如果你反转它,并在所有重叠的电影之间放置边缘,你可以通过找到通过生成的 DAG 的最长路径来解决它。
  • 尼克,好主意,只是它将是无向图而不是 DAG。
【解决方案2】:

只需选择完成日期最早的电影,然后从那里开始,O(n^2) 流程即可解决此问题(可能有更快的解决方案)。由于我们找到了多项式时间解,因此它不是 TSP 的实例,除非:(1) P=NP,并且 (2) (1) 的证明非常简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    相关资源
    最近更新 更多