汉密尔顿路径&社交图算法

时间:2012-02-07 06:01:06

标签: algorithm graph heuristics np-complete hamiltonian-cycle

我有一个随机的无向社交图。

如果可能,我想找到汉密尔顿路径。或者如果不可能(或者不可能在多项式时间内知道可能的话)一系列路径。在这个“一系列路径”中(其中所有N个节点仅使用一次),我想最小化路径的数量最大化路径的平均长度。 (因此,没有单个节点的N路径的简单解决方案)。

我已经为节点和边缘生成了一个邻接矩阵。

有什么建议吗?指针朝正确的方向?我意识到这需要启发式,因为问题的NP完全(?)性质,我可以用“足够好”的答案。我也想在Java中这样做。

谢谢!

4 个答案:

答案 0 :(得分:2)

如果我正确地解释你的问题,那么你所要求的仍然是NP难的,因为“多路径”问题的最佳解决方案将是哈密尔顿路径,并且确定是否存在一个是已知的NP难问题。此外,即使你保证不存在哈密顿路径,解决这个问题仍然可能是NP难的,因为我可以给你一个图表,其中一个浮动空间的单个断开节点,最好的解决方案是包含该节点的平凡路径和剩余图中的哈密顿路径。因此,除非P = NP,否则不会有针对您的问题的多项式时间算法。

希望这会有所帮助,并为否定结果感到抱歉!

答案 1 :(得分:2)

Angluin和Valiant给出了一个接近线性时间的启发式算法,几乎总是在一个足够密集的Erdos-Renyi随机图中。它由Wilf, on page 121描述。可能你的随机图是而不是 Erdos-Renyi,但启发式可能无论如何都会起作用(当它“失败”时,它仍会给你一个(希望)长路径;贪婪地走这条路并再次运行AV)

答案 2 :(得分:1)

正如你已经意识到在多项式时间里没有确切的解。您可以尝试一些随机搜索方法。我的建议,从遗传算法开始,尝试禁忌搜索。

答案 3 :(得分:1)

使用遗传算法(无交叉),其中每个人都是节点的排列。这为您提供了每一代的“一系列路径”,演变为最小数量的路径(1)和最大平均值。长度(N)。