我有一个数字金字塔。每个数字代表相关的点数。我需要使用贪心算法来找到从金字塔顶部到底部的成本最低的路径。我读过关于不知情的&知情的搜索算法,但我仍然不知道该选择什么。你最喜欢这类问题的是什么?贪心最佳搜索/ A *搜索或其他?这是一个如此简单的问题,但我没有使用所有这些算法来知道什么是最好的选择。正如我所说,它必须是一个贪婪的算法。
答案 0 :(得分:1)
如果我理解正确,在你的金字塔中你总是可以选择向左或向右下降,而到达底部的成本是你通过的所有节点的总和。
在这种情况下,只需从底部开始。从底部的第2行开始。对于行中的每个节点,请查看下面行中的左右子节点。将较便宜的子节点的成本添加到您所在的节点。向上移动并重复,直到您处于根/峰值。现在每个节点都包含从那里到底部的最便宜路径的成本。通过以更低的成本选择子节点,贪婪地下降。
答案 1 :(得分:1)
如果您没有必须使用贪婪算法,这在这里是不正确的。 对于这类问题,您自然会使用一种称为“动态编程”的技术。
您使用无穷大初始化金字塔的所有方块(您进行备份) - 除了具有其自身值的初始点。
然后你逐行从上到下处理金字塔。 你尝试从第一行开始去任何地方(所以唯一的一个是顶部),你更新第二行的节点,给它们顶部的值+它们的值。然后移动到第二行,并更新下一行中的节点。
之前您可能找到了更好的路径到该节点(从放置一个地方的节点开始),因此您只能更新新创建的路线是否“更快”。 (因此你创建了一个无限初始化,这意味着在开始时你不知道是否有任何路由实际存在。)在你完成处理一个pyradim级别后,你知道你有最好的路由到放置在等级以下。
即使听起来有点复杂,也很容易实现,我希望它不会让你成为问题。
答案 2 :(得分:0)
你想要的是Dijkstra算法它比A *搜索更简单,但我想DFS会这样做。我不确定你真正想要的是什么。