我想要一个算法来查找从有向图的最初一个到达最后一层的方法总数,其最后一层和第一层只包含一个节点。请指出我应该使用哪种算法。
答案 0 :(得分:0)
如果从第一个节点到最后一个节点的路径上有循环,则路径数量无限大。
否则,没有循环,所以我们感兴趣的图形的一部分是非循环的(图中可能有某个循环,但如果不在第一个和最后一个之间的路径上节点,没关系)。这就是为什么可以使用动态编程来计算路径数量的原因:
基本情况:f(start node) = 1
。
转换:f(node) = sum f(neighbor) for all neighbors of the node
。我们可以正确计算这个值,因为没有循环。
答案是f(last node)
。
我们可以显式地使用拓扑排序,也可以使用memoization编写递归函数(在这两种情况下,时间和空间复杂度都是线性的)。