如何证明我的问题是 np-hard

计算科学 复杂 近似 启发式
2021-11-26 07:01:47

对于一项任务,我需要编写一个应用程序来安排对话。类似于快速约会或 Pta 会议的东西。问题是我知道这很难解决,但我不知道它是否是 np-hard。我能做些什么来证明这个问题是 np-hard 的?我读到我需要将已知问题减少到我的问题。但是我该怎么做呢?

小学代表与高中代表进行会谈的活动。他们将谈论将被转移到高中的学生。大约有200所小学和40所高中将参加此次活动。而这个活动持续了2天。

规则是:

  1. 每次对话的持续时间取决于每个代表的学生人数。每个学生每次对话持续 5 分钟。如果一个小组由 1 名学生组成,则此对话持续 10 分钟。
  2. 没有时间冲突
  3. 同一组的所有学生将被安排在一起,因此,一个代表只能面对同一个代表一次。
  4. 时间跨度为 13.00-19.00
  5. 代表的等待时间最多是其时间的 20%。等待时间是第一次和最后一次对话之间的空时隙。
  6. 2天的时间表
  7. 每个代表参加1天。

基于此,我将决定是否使用启发式算法来解决此问题。

对不起我的英语不好

提前致谢

2个回答

表明可以将一个问题简化为另一个问题以证明它是 NP-hard 通常不是一件小事。这意味着您必须证明您可以将问题重新表述为另一个已知为 NP-hard 的问题,然后从重新表述的问题的解中获得原始问题的解。

更常见的方法是查看是否有人已经查看了您的特定问题。你这里有一个典型的资源分配问题。例如,将您的高中代表视为小学代表想要拥有的资源,但要遵守某些规则(每个小学代表都需要给定长度的资源)。这与将公共汽车视为路线想要拥有的资源(不同的时间)没有什么不同。换句话说,这是一个相当普遍的问题,应该有大量关于为这个问题寻找有效算法的文献,以及这个问题属于哪个复杂等级。(不,对不起,我不知道答案。)

你的描述让我想起了背包问题,其中决策和优化部分分别是 NP-complete 和 NP-hard。典型的方法是使用动态编程记忆贪心算法)来解决它谷歌搜索背包调度也会返回很多结果(至少来自我的机器/ip)。在维基百科中也有类似背包问题的列表将您的问题减少到列表中的问题之一足以证明 NP 硬度。