Algorithm 选择贪婪算法寻找最小代价路径

Algorithm 选择贪婪算法寻找最小代价路径,algorithm,graph,path,greedy,Algorithm,Graph,Path,Greedy,我有一个数字金字塔。每个数字表示关联的点数。我需要使用贪婪算法来找到从金字塔顶部到底部成本最低的路径。我读过一些关于未被告知的搜索算法,但我仍然不知道该选择什么。你认为什么最适合解决这类问题?贪婪的最佳第一搜索/A*搜索还是其他?这是一个如此简单的问题,但我不习惯于所有这些算法来知道什么是最好的选择。正如我所说,它必须是一个贪婪的算法。你想要的是Dijkstra算法,它比*搜索更简单,但我想DFS会这样做。我不确定你真正想要什么。如果我理解正确,在金字塔中,你总是可以选择向左或向右下降,而到达底

我有一个数字金字塔。每个数字表示关联的点数。我需要使用贪婪算法来找到从金字塔顶部到底部成本最低的路径。我读过一些关于未被告知的搜索算法,但我仍然不知道该选择什么。你认为什么最适合解决这类问题?贪婪的最佳第一搜索/A*搜索还是其他?这是一个如此简单的问题,但我不习惯于所有这些算法来知道什么是最好的选择。正如我所说,它必须是一个贪婪的算法。

你想要的是Dijkstra算法,它比*搜索更简单,但我想DFS会这样做。我不确定你真正想要什么。

如果我理解正确,在金字塔中,你总是可以选择向左或向右下降,而到达底部的成本是你通过的所有节点的总和


在这种情况下,只需从底部向上移动即可。从底部第二排开始。对于行中的每个节点,请查看其在下一行中的左侧和右侧子节点。将较便宜的子节点的成本添加到您所在的节点。向上移动一行并重复,直到到达根/峰值。每个节点现在将包含从那里到底部的最便宜路径的成本。只要选择成本较低的子节点就可以贪婪地下降。

如果你不必使用贪婪算法,这在这里是不正确的。 对于这类问题,您自然会使用一种称为“动态规划”的技术

你用无穷大初始化金字塔的所有正方形(你做了一个备份)——除了初始点有自己的值

你们从上到下,一行一行地处理金字塔。 您尝试从第一行(因此唯一的一行是top)到任何可以到达的地方,并更新第二行的节点,为它们提供top的值+它们的值。然后移动到第二行,并更新下一行中的节点

您可能在更早的时候找到了到该节点的更好的路由(从左一处放置的节点开始),因此只有在新创建的路由“更快”时才进行更新。(因此,您进行了无限初始化,这意味着在beggining时,您不知道是否存在任何路由)。处理完一个级别的吡咯烷酮后,您知道您有到位于该级别正下方的节点的最佳路由


即使它听起来有点复杂,但很容易实现,我希望它不会给您带来问题。

我就是这么做的。这看起来太简单了,但至少我使用了“贪婪”的方法:从金字塔的顶部开始,总是在三个可能的节点中选择成本最低的下一个节点。我只是想确定我的思路是正确的。谢谢。@Joanna:你要做的是纠正你的问题,因为金字塔在每一层有4个可能的节点。你想要的是四分之一。一个四分体在每一层有3个节点。@joanna只需确保您所看到的成本是从那里到底部的最短路径的成本。如果只是该节点本身的成本,那么您的算法是错误的。