极稠密无向简单图中的哈密顿路径数
Number of Hamilton paths in an extremely dense undirected simple graph
在一个极其密集的无向简单图(大约 99.99% 的边是连通的)中计算汉密尔顿路径数的最快方法(算法)是什么?
我想到了以下方法:
首先计算完整图中的哈密顿路径数
一次删除一条边,但我无法计算出删除一条边会减少多少条路径。还有如何在去除边缘时防止重复计数?
我在 Math.SE 上遇到了类似的问题,但那是关于汉密尔顿循环而不是路径,我希望能显着改变问题。答案也不是很清楚,因此 post.
我不认为你可以计算出汉密尔顿路径的数量
实际生成路径或单独考虑每条路径
数的时候。对于特殊图——比如完整图——这个
当然可以,但一般情况下不会。
你可以生成完整图中的所有汉密尔顿路径并检查
对于每一个,如果它使用图形中的边的子集。当然
你可以通过修剪某些分支来加快速度
在完整图中生成汉密尔顿路径。
由于你的图很大,这种做法肯定不行
可行的。但是,您可以计算出所有路径的数量
包含缺失边之一的完整图,然后减去
这个数字。
我不认为这是微不足道的。关于它的一些想法:让我们考虑一下
最简单的情况,只缺少一条边。我们可以描述一条路径
具有一系列边或节点。假设你的图表有 n
节点。有 n-1
个缺失边的可能位置
通过完整图的汉密尔顿路径。边缘可以被遍历
可以遍历两个方向和不与边相邻的节点
在 (n-2)!
个不同的订单中。因此我们可以减去
2 * (n-1) * (n-2)! = 2 * (n-1)!
从通过完整图的汉密尔顿路径总数到
得到想要的结果。
如果正好缺少两条边,我们不能只减去两倍
number 因为我们对几条路径进行了两次计数,即路径
包含两条边。所以我们必须计算这个数字并添加它
再次。但现在它变得复杂了:重要的是边缘如何
有关系。如果它们是相邻的,则数字会比实际数字小
否则。所以一般来说你不能只计算
包含 k
条缺失边的汉密尔顿路径,但它是
重要的是您正在考虑哪些边缘以及它们是否
相邻与否。
但是假设你可以计算通过某个特定路径的路径数
边的选择(所有排列、遍历方向和
路径中的位置)。让我们进一步假设 k
边是
丢失的。您可以计算路径的数量,包括至少一个
像这样的边缘:
分别计算通过任何 k
条边的路径数
总结一下。
对于每对边,您计算了穿过这对边的路径
两次,所以再次减去这些路径(考虑每一对
个人)。
现在考虑包含三个边的路径。他们已经
数了 6 次并减去 3 次(3 个不同的对),所以
你必须减去它们两次。
包含4条边的路径要减去3次(因为
它们在包含 3 个边的路径中出现 4 次)。所以
上。
但是再说一次:你必须考虑边的每一种组合
个别地。甚至有可能某组边是
不兼容,因为某个节点出现了三次。还要考虑
考虑遍历边的方向。
所以没有简单的公式但是如果缺失边的数量是
真的很小,你可以数一下路径。
在一个极其密集的无向简单图(大约 99.99% 的边是连通的)中计算汉密尔顿路径数的最快方法(算法)是什么?
我想到了以下方法:
首先计算完整图中的哈密顿路径数
一次删除一条边,但我无法计算出删除一条边会减少多少条路径。还有如何在去除边缘时防止重复计数?
我在 Math.SE 上遇到了类似的问题,但那是关于汉密尔顿循环而不是路径,我希望能显着改变问题。答案也不是很清楚,因此 post.
我不认为你可以计算出汉密尔顿路径的数量 实际生成路径或单独考虑每条路径 数的时候。对于特殊图——比如完整图——这个 当然可以,但一般情况下不会。
你可以生成完整图中的所有汉密尔顿路径并检查 对于每一个,如果它使用图形中的边的子集。当然 你可以通过修剪某些分支来加快速度 在完整图中生成汉密尔顿路径。
由于你的图很大,这种做法肯定不行 可行的。但是,您可以计算出所有路径的数量 包含缺失边之一的完整图,然后减去 这个数字。
我不认为这是微不足道的。关于它的一些想法:让我们考虑一下
最简单的情况,只缺少一条边。我们可以描述一条路径
具有一系列边或节点。假设你的图表有 n
节点。有 n-1
个缺失边的可能位置
通过完整图的汉密尔顿路径。边缘可以被遍历
可以遍历两个方向和不与边相邻的节点
在 (n-2)!
个不同的订单中。因此我们可以减去
2 * (n-1) * (n-2)! = 2 * (n-1)!
从通过完整图的汉密尔顿路径总数到 得到想要的结果。
如果正好缺少两条边,我们不能只减去两倍
number 因为我们对几条路径进行了两次计数,即路径
包含两条边。所以我们必须计算这个数字并添加它
再次。但现在它变得复杂了:重要的是边缘如何
有关系。如果它们是相邻的,则数字会比实际数字小
否则。所以一般来说你不能只计算
包含 k
条缺失边的汉密尔顿路径,但它是
重要的是您正在考虑哪些边缘以及它们是否
相邻与否。
但是假设你可以计算通过某个特定路径的路径数
边的选择(所有排列、遍历方向和
路径中的位置)。让我们进一步假设 k
边是
丢失的。您可以计算路径的数量,包括至少一个
像这样的边缘:
分别计算通过任何 k
条边的路径数
总结一下。
对于每对边,您计算了穿过这对边的路径 两次,所以再次减去这些路径(考虑每一对 个人)。
现在考虑包含三个边的路径。他们已经 数了 6 次并减去 3 次(3 个不同的对),所以 你必须减去它们两次。
包含4条边的路径要减去3次(因为 它们在包含 3 个边的路径中出现 4 次)。所以 上。
但是再说一次:你必须考虑边的每一种组合 个别地。甚至有可能某组边是 不兼容,因为某个节点出现了三次。还要考虑 考虑遍历边的方向。
所以没有简单的公式但是如果缺失边的数量是 真的很小,你可以数一下路径。