非常密集的无向简单图中的Hamilton路径数

时间:2016-01-07 09:52:53

标签: algorithm graph graph-algorithm

在极其密集的无向简单图中计算Hamilton路径数的最快方法(算法)是什么(大约99.99%的边连接)?

我正在考虑以下方式:

首先,计算完整图表中Hamilton路径的数量。

一次删除一条边,但我无法弄清楚在删除边时会减少多少条路径。还有如何在去除边缘时防止重复计算?

我在Math.SE上遇到了一个类似的问题,但那是关于汉密尔顿循环而不是路径,我希望这会大大改变这个问题。答案也不太清楚,因此这篇文章。

1 个答案:

答案 0 :(得分:0)

我不认为你可以计算没有汉密尔顿路径的数量 实际上生成路径或单独考虑每个路径 在数数。对于特殊图形 - 如完整图形 - 这个 肯定是可能的,但不是一般的。

您可以在完整图表中生成所有汉密尔顿路径并进行检查 对于每一个,如果它使用图表中边缘的子集。当然 你可以通过修剪某些分支来加快速度 在完整的图中生成Hamilton路径。

由于您的图表非常大,因此这种方法肯定不是 可行。但是,您可以计算所有路径的数量 包含缺失边之一的完整图,然后减去 这个号码。

我不认为这是微不足道的。关于它的一些想法:让我们考虑一下 最简单的情况是只缺少一条边。我们可以描述一条路径 具有一系列边或节点。我们假设您的图表有n 节点。 a中缺少边缘有n-1个可能的位置 哈密​​尔顿路径通过完整的图表。可以遍历边缘 可以遍历两个方向和不与边缘相邻的节点 在(n-2)!个不同的订单中。因此我们可以减去

2 * (n-1) * (n-2)! = 2 * (n-1)!

从汉密尔顿路径的总数到完整的图表 获得所需的结果。

如果缺少两条边,我们不能只减去两次 数字,因为我们计算两次路径,即路径 包含两个边。所以我们必须计算这个数字并加上它 再次。但现在变得复杂了:重要的是如何边缘 有关系。如果它们相邻,则数量小于它 否则。所以一般来说,你不能只计算数量 汉密尔顿路径包含k个缺失的边缘,但它是 重要的是你考虑哪些边缘以及它们是否是 相邻与否。

但是,让我们说你可以计算通过某个路径的路径数量 选择边缘(所有排列,遍历和方向) 在路径中的位置)。让我们进一步假设k个边缘 失踪。您可以计算包含至少一个的路径数 像这样的边缘:

分别计算通过任何k边的路径数 总结一下。

对于每对边缘,您已计算穿过该对的路径 两次,所以再次减去这些路径(考虑每一对 个别地)。

现在考虑包含三条边的路径。他们已 计数六次并减去三次(三对不同),所以 你必须减去它们两次。

包含四条边的路径必须减去3次(因为 它们在包含3个边的路径中表示4次)。所以 上。

但是又一次:你必须考虑边缘的每个组合 个别。甚至可能是某一组边缘 不兼容,因为某个节点出现三次。也考虑进去 考虑遍历边缘的方向。

所以没有简单的公式,但是如果缺少边数是 非常小,你可以计算路径。