【问题标题】:Recursion to iteration - or optimization?递归迭代 - 还是优化?
【发布时间】:2012-06-16 22:02:46
【问题描述】:

我有一个算法可以搜索图中两个节点之间的所有可能路径,但我选择的路径不重复节点并且具有我指定的路径长度。
它在 ActionScript3 中,我需要将我的算法更改为迭代或优化它(如果可能的话)。
我不知道该怎么做,我不确定更改为迭代是否会为该函数带来更好的执行时间。可能无法优化。我不知道。

这是我的功能: http://pastebin.com/nMN2kkpu

如果有人能就如何解决这个问题提供一些建议,那就太好了。

【问题讨论】:

  • 您能否用非常笼统的术语解释您的算法要实现的目标。它应该找到任何给定节点之间的最短路径,还是应该只找到所有节点之间的所有路径?如果是前者,Djisktra 的算法就可以解决问题,如果是后者,我的猜测是无论如何这将是一个相当耗费 CPU 的操作。我意识到你确实在你的问题中做了一些解释,但我并不完全清楚。
  • @shaunhusain 算法找到任何给定节点之间的所有路径,但我的修改只返回给定长度的路径,并且路径的每个顶点只能在我的“生成”路径中使用一次。

标签: algorithm actionscript-3 optimization recursion iteration


【解决方案1】:

一方面,您可以通过起始顶点对边进行排序。然后,遍历一个顶点的邻居将与该顶点的邻居数成正比(而现在它采用O(M),其中M 是整个图的边数)。

如果你放宽不重复顶点的条件,我相信问题可以在更好的时间得到解决。

但是,如果您需要它,恐怕没有简单的更改可以让您的代码更快。不过,我不能保证。

另外,如果我是正确的,代码 sn-p 测试是否已经使用了 edge,而不是是否使用了 vertex。我注意到的另一件事是,一旦找到这样的路径,就不会停止递归。由于在大多数*图中,对于 length 的合理值,这样的路径将存在,我想说如果您只需要一个这样的路径,那么在找到一个这样的路径后,您可能会浪费大量的 CPU 时间。

*Most - 读作“也许是大多数 (IMO)”。

【讨论】:

    猜你喜欢
    • 2011-09-21
    • 2011-05-23
    • 2015-03-24
    • 2012-04-18
    • 2014-03-24
    • 2012-06-25
    • 2016-11-19
    相关资源
    最近更新 更多