我有一个算法可以搜索图中两个节点之间的所有可能路径,但我选择的路径没有重复节点,并且路径的长度是我指定的。
它在 ActionScript3 中,我需要将我的算法更改为迭代算法或对其进行优化(如果可能的话)。
我不知道该怎么做,我不确定更改为迭代是否会为该函数带来更好的执行时间。可能无法优化。我不知道。
这是我的功能: http://pastebin.com/nMN2kkpu
如果有人可以提供一些有关如何解决该问题的提示,那就太好了。
最佳答案
一方面,您可以通过起始顶点对边进行排序。然后,遍历一个顶点的邻居将与该顶点的邻居数成正比(而现在它需要 O(M)
,其中 M
是边数对于整个图表)。
如果你放宽不重复顶点的条件,我相信问题可以在更好的时间解决。
但是,如果您需要它,恐怕没有任何简单的更改可以使您的代码更快。不过,我不能保证这一点。
此外,如果我是正确的,代码片段会测试是否已经使用了 edge,而不是是否使用了 vertex。我注意到的另一件事是,一旦找到这样的路径,就不会停止递归。因为在大多数*图中,对于合理的 length
值都会存在这样的路径,我想说如果你只需要一个这样的路径,你可能会在一个这样的路径之后浪费大量的 CPU 时间找到了。
*大多数 - 读作“可能是大多数 (IMO)”。
关于algorithm - 递归到迭代 - 还是优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11023482/