Algorithm 极稠密无向简单图的Hamilton路数

Algorithm 极稠密无向简单图的Hamilton路数,algorithm,graph,graph-algorithm,Algorithm,Graph,Graph Algorithm,在一个非常稠密的无向简单图(大约99.99%的边是连通的)中,计算汉密尔顿路径数的最快方法(算法)是什么 我在想以下方法: 首先,计算完整图中Hamilton路径的数目 一次删除一条边,但我无法计算删除一条边会减少多少路径。另外,如何在去除边缘时防止重复计数 我在Math.SE上遇到了一个类似的问题,但那是关于Hamilton循环而不是路径的,我希望这能显著改变这个问题。答案也不太清楚,因此这篇文章。我不认为你能计算出汉密尔顿路径的数量 实际生成路径或单独考虑每条路径 数数的时候。对于特殊的图,

在一个非常稠密的无向简单图(大约99.99%的边是连通的)中,计算汉密尔顿路径数的最快方法(算法)是什么

我在想以下方法:

首先,计算完整图中Hamilton路径的数目

一次删除一条边,但我无法计算删除一条边会减少多少路径。另外,如何在去除边缘时防止重复计数


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

我不认为你能计算出汉密尔顿路径的数量 实际生成路径或单独考虑每条路径 数数的时候。对于特殊的图,比如完整的图 这当然是可能的,但不是一般的

您可以在完整的图中生成所有Hamilton路径并进行检查 如果它使用图形中的边子集,则为每个边。当然 您可以通过在运行时修剪某些分支来加快速度 生成完整图中的Hamilton路径

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

我不认为这是微不足道的。关于它的一些思考:让我们考虑一下 缺少一条边的最简单情况。我们可以描述一条路径 具有一系列边或节点。假设你的图有n 节点。图中有
n-1
缺失边的可能位置 通过完整图的hamilton路径。该边可以在中穿过 可以沿两个方向遍历与边不相邻的节点 在
(n-2)不同的订单。因此我们可以减法

2 * (n-1) * (n-2)! = 2 * (n-1)!
从通过完整图的hamilton路径总数到 获得期望的结果

如果正好缺了两条边,我们不能只减去两倍的边 数字,因为我们两次计算多条路径,即路径 包含两条边的。所以我们必须计算这个数字,然后把它加起来 再一次。但现在它变得复杂了:重要的是如何处理边缘 它们是相关的。如果它们是相邻的,则该数字将小于它的值 否则。所以一般来说,你不能只计算 包含
k
条缺失边的hamilton路径,但它是 重要信息:您正在考虑哪些边以及它们是否 相邻与否

但是假设你可以计算通过某个特定路径的路径数 选择边(所有排列、遍历方向和 路径中的位置)。让我们进一步假设
k
边是 丢失的您可以计算至少包含一条路径的路径数 对于这样的边:

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

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

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

包含四条边的路径必须减去3次(因为 它们在包含3条边的路径中表示4次)。诸如此类 开

但又一次:你必须考虑每个边缘的组合。 个别地。甚至有可能某一组边是 不兼容,因为某个节点出现三次。也考虑 说明边的横穿方向

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

如果我没有错,就有n条!完整图的路径。这难道不是一个O(n!)算法吗?我怎样才能加快速度,请说得更具体些。还有,你这里所说的“特殊图表”到底是什么意思?对于特殊图表,我指的是完整的图表(也更新了答案)。是的,复杂性是O(n!)。这只适用于较小的图形。我会考虑的。也许我能找到一个更好的解决方案。你的图会有多大,有多少边会被删除?1-2或100-200?最多可以有10^5个节点,边缘是否可能是相邻的?我想如果没有的话会容易些。你是说去掉了边吗?如果是,删除的边可以是相邻的。是的,对不起,我指的是删除的边。好的,我会考虑的。我想我必须更新我的答案,因为肯定有一种方法可以更快地做到这一点,但我还不能简明扼要地写下来。