77157

什么是发现遍历图的所有顶点的路线更好的算法?(What is a better algorithm

所以,我有以下Question:

给定的X网格由Y尺寸,计算通过它,在一个角落里开始的路线的数量(比方说左上)和结束在另一个(右下)和通过每个顶点。

所以,我目前的方法,通过只是想每一个可能的路径和计数是到达终点并遍历每个节点的那些只是野蛮的力量吧。 虽然它的工作原理,它是为O(n ^ 2),并得到令人难以置信的慢速度非常快。 我不知道该怎么做组合方法,因为该路径遍历每个顶点的要求。

我抬起头,更复杂的算法,并Hierholzer的算法计算欧拉路径似乎有些关联,但并不完美,因为节点不能移动超过一次于此。

正因为如此,我的程序工作,但得厉害,我想使它更有效率。 是否有更好的算法,我可以使用?

编辑感谢迄今答案。 只是为了澄清,在2D网格中的所有节点都通过N / E / S / W连接

此外,网格不一定是正方形

Answer 1:

没有什么可以做,因为它是汉弥尔顿路径Question ,这是NP完全Question。

但是,你实际上可能寻找别的东西,并添加一些限制的Question,你正在试图解决...

编辑:

作为@JanDvorak指出, 特定的限制是,你正在使用方形网格。 我发现至今:

如果x是偶数,不是没有办法去通过从右下角左上角年底开始的所有顶点。 证明:

让我们沿着轴数执导的动作,例如最高为-1 ,下来就是1 ,左是-1 ,右-1 。 因此,通过X电网的x,你的总运动将是2*x 。 在每一个顶点(除了最后一个!)你是只选择一个方向。 所以,如果有,甚至你需要经过顶点的数量,你的总运动甚至会,反之为奇。 如果x是偶数,比有奇数个顶点,但总的运动甚至还是老样子=>你是不是能找到什么办法。



Answer 2:

首先,如果x是偶数,则显示答案一个简单的奇偶校验参数始终为零; 检查器网格和注意到左上和右下正方形是相同的颜色,并且颜色不能访问了第一和n 2个由于n 2是偶数,而1为奇数。

如果x是奇数,我不知道怎么算的路径,但是请注意,总数至少成倍快速增长:一个N * N电网的任何遍历可以解除的两个不同的遍历(N + 2) *(N + 2)的网格。 您可以通过沿顶行,沿着第二排左,右去得到一个,顺着第一列,最多沿第二列,然后在剩余的广场做你的N * N格遍历; 您可以通过覆盖以相反的顺序的前两行和列得到其他。

这应该告诉你,蛮力解决方案是不可能很好地工作。



Answer 3:

我曾与一个主题本学期类似这样的Question。 我想你可能会对启发式算法,我们一起来看看:

  • 禁忌搜索
  • 进化计算

你可能会想,虽然留在蛮力,除非你真的需要改善; 因为他们是相当复杂的。



文章来源: What is a better algorithm for finding routes that traverse all vertices in a graph?

Recommend