完全加权图和哈密尔顿之旅

时间:2015-02-20 15:55:23

标签: algorithm graph computation-theory np hamiltonian-cycle

我在期中考试时遇到了一个问题。任何人都可以澄清答案吗?

问题A:给定一个完整的加权图G,找到一个权重最小的汉密尔顿游。

问题B:给定一个完整的加权图G和实数R,G是否具有最多R的哈密顿量之旅?

假设有一台机器可以解决B.我们可以多少次呼叫B(每次给出G和实数R),用该机器解决问题A?假设G中边缘的总和达到M.

1)我们不能这样做,因为有无数的状态。

2)O(| E |)次

3)O(lg m)次

4)因为A是NP-Hard,所以不能这样做。

3 个答案:

答案 0 :(得分:3)

第一个算法

答案是(3) O(lg m) times。你只需要在加权图中对最小哈密顿旅行进行二分搜索。请注意,如果图表中存在长度为L的哈密尔顿之旅,那么检查长度为L'的哈密尔顿之旅(L' > L是否存在)是没有意义的,因为您感兴趣在最小重量的哈密尔顿之旅中。因此,在算法的每个步骤中,您可以消除剩余一半可能的游览权重。因此,您必须在计算机B次调用O(lg m),其中m代表完整图表中所有边的总权重。


修改

第二种算法

我稍微修改了上面的算法,该算法使用机器O(|E|)次,因为有些人说我们不能在不可数的可能值集中应用二进制搜索(并且它们可能是正确的):取来自图的每个可能的边缘子集,并且对于每个子集存储一个值,该值是来自子集的所有边的权重之和。让我们将所有子集的值存储在名为Val的数组中。此数组的大小为2^|E|。按递增顺序排序Val,然后对最小哈密顿路径应用二进制搜索,但这次只使用Val数组中的值调用解决问题B的机器。由于每个边缘子集都包含在已排序的数组中,因此可以保证找到解决方案。该计算机的总呼叫数为O(lg(2^|E|)),即O(|E|)。所以,正确的选择是(2) O(|E|) times


注意:

我提出的第一个算法可能不正确,因为有些人注意到你不能在不可数集中应用二进制搜索。由于我们讨论的是实数,因此我们无法在[0-M]

范围内应用二进制搜索

答案 1 :(得分:1)

我认为那个意味着答案的选择是1-你不能那样做。 原因是你只能对可数集进行二进制搜索。

请注意,图形的边缘甚至可能具有负权重,此外,它们可能具有分数或甚至无理的权重。在这种情况下,答案的搜索空间将是小于m的所有实际值的集合。

但是,您可能会在Log(n)时间内任意接近A的答案,但您无法找到确切的答案。 (n是可数空间的大小)。

答案 2 :(得分:1)

假设在图的编码中,权重被编码为表示非负整数的二进制字符串,并且Problem B实际上可以通过输入实数来解决,并基于此进行计算,事情显然如下。

可以在积分区间{0,...,M}上进行第一次二分搜索,以获得O(log M)调用Problem B算法的哈密顿游的最小权重。随后最佳已知,我们可以消除G中的单个边缘,并使用结果图作为Problem B算法的输入来测试最佳变化。此过程使用O(|E|)Problem B算法的调用来识别在最佳哈密顿游览中出现的边。此方法的总运行时间为O( (|E| + log M ) * r(G)),其中r(G)表示Problem B将图G作为输入的算法的运行时间。我认为r是一个多项式,尽管问题没有明确说明这一点;总的来说,总运行时间将在输入的编码长度中以多项式为界,因为M可以在多项式时间内计算(因此在输入G的编码长度中是伪多项式限制的)

话虽如此,所谓的答案可以评论如下。

  1. 答案是错误的,因为必要状态的集合是有限的。
  2. 可能是真的,但不遵循上面讨论的算法。
  3. 可能是真的,但不遵循上面讨论的算法。
  4. 答案是对的。严格来说,Problem A NP - 硬度并不排除多项式时间算法;此外,Problem B的算法未被声明为多项式,因此如果P=NP可通过多项式调用次数求解{偶数Problem A,则 Problem B的算法(上面概述的算法就是这种情况)。