我有一个数字金字塔。每个数字代表关联的点数。我需要使用贪婪算法来找到从金字塔顶部到底部成本最低的路径。我读过关于不知情的&知情搜索算法,但仍然不知道该选什么。你最适合这种类型的问题是什么?贪婪的最佳搜索/ A *搜索或其他?这是一个很简单的问题,但我没有使用所有这些算法来知道什么是最佳选择。正如我所说,它必须是一个贪婪的算法。选择贪婪算法找到最低成本路径
1
A
回答
1
如果我正确地理解了你,在你的金字塔中,你总是可以选择向左或向右下降,到底的成本就是你通过的所有节点的总和。
在这种情况下,只需从底部开始工作即可。从底部第二排开始。对于该行中的每个节点,请查看下面一行中的左侧和右侧儿童。将更便宜的子节点的成本添加到您所在的节点。向上移动并重复,直到你在根/峰。现在每个节点将包含从那里到最底层的最便宜路径的成本。通过选择成本更低的子节点来贪婪地下降。
0
你想要的是Dijkstra算法它比A *搜索更简单,但我想DFS会这样做。我不确定你真正想要什么。
1
如果您没有使用贪婪算法的必要性,这里不正确。 对于这种问题,你自然会使用一种叫做“动态编程”的技术。
你初始化你的金字塔的所有方块(你做一个备份)与无限 - 除了它自己的价值初始点。
然后你从上到下逐行处理金字塔。 您尝试从第一行开始(只有一行是顶部),并且您更新第二行的节点,并为它们赋予top +它们的值。然后移动到第二行,并更新下一行中的节点。
您可能以前找到了一个更好的路由到该节点(从节点放置一个位置开始),因此只有在新创建的路由“更快”时才会更新。 (因此你做了无限初始化,这意味着在开始时你不知道是否有实际存在的路线)。当你完成pyradim的处理后,你知道你有最好的路线来放置在级别在下面。
即使它听起来有点复杂,它很容易实现,我希望它不会让你成为一个问题。
相关问题
- 1. 贪婪算法:成本最小化
- 2. 找到与贪婪算法
- 3. 贪婪算法
- 4. 击败贪婪算法
- 5. 贪婪算法,调度
- 6. 贪婪算法:机器人
- 7. 贪婪算法的一般算法
- 8. 使用贪婪算法寻找最小独立支配集
- 9. 如何在2D矩阵中找到最低成本路径
- 10. 最低成本路径障碍(R)(gdistance)
- 11. 使用贪婪算法找到树的最小尺寸主导集合
- 12. 如何判断贪婪算法是否足以找到最小硬币更改?
- 13. 如何找到最短路径成本?
- 14. 非重叠区间的贪婪选择
- 15. 贪婪算法的使用例子?
- 16. 贪婪的算法实现,Haskell
- 17. 双方匹配的贪婪算法
- 18. 贪婪算法,numpy的,矩阵,移出
- 19. 我的贪婪算法有缺陷吗?
- 20. 硬币更改贪婪算法
- 21. 贪婪的最大流量
- 22. ANTLR的贪婪选项
- 23. 最大连续子序列 - 动态编程或贪婪算法?
- 24. 如何将这个贪婪算法证明为最优?
- 25. 仅选择最低成本的行
- 26. 非贪婪的正则表达式不会选择最接近的选择
- 27. 寻找最短路径数的算法
- 28. 局部算法和贪婪算法有什么区别?
- 29. 贪婪行为
- 30. 如何找到最低成本?
这就是我所做的。它看起来太简单了,但至少我使用了“贪婪”的方法:从金字塔顶部开始,总是选择三个可能节点中成本最低的下一个节点。我只是想确保我以正确的方式思考。不管怎么说,还是要谢谢你。 – joanna 2011-03-21 13:41:31
@Joanna:你想要的是纠正你的问题,因为金字塔在每个级别有4个可能的节点。你想要的是一个四合一者。一个tetraeder在每个级别有3个节点。 – Bytemain 2011-03-21 13:51:03
@joanna只要确保你所看到的成本是从那里到最底部的最短路径的成本。如果它只是该节点本身的成本,那么你的算法是不正确的。 – 2011-03-21 14:26:56