Algorithm 分而治之,动态规划和贪婪算法!
当我有一个具有最优子结构的问题,并且没有子问题共享子问题,那么我可以使用分治算法来解决它 但是当子问题共享子问题(重叠子问题)时,我可以使用动态规划来解决这个问题吗 这是正确的吗 贪婪算法与动态规划有何相似之处 当我遇到优化问题时 子结构和无子问题共享 子问题,然后我可以使用除法 而征服算法能解决吗 是的,只要你能为每一类子问题找到一个最优算法 但是当子问题共享 子问题(重叠) 子问题)然后我可以使用动态 编程来解决问题 这是正确的吗 对。动态规划基本上是分治算法家族的一个特例,所有子问题都是相同的 贪婪算法有什么相似之处 动态规划 它们是不同的。Algorithm 分而治之,动态规划和贪婪算法!,algorithm,Algorithm,当我有一个具有最优子结构的问题,并且没有子问题共享子问题,那么我可以使用分治算法来解决它 但是当子问题共享子问题(重叠子问题)时,我可以使用动态规划来解决这个问题吗 这是正确的吗 贪婪算法与动态规划有何相似之处 当我遇到优化问题时 子结构和无子问题共享 子问题,然后我可以使用除法 而征服算法能解决吗 是的,只要你能为每一类子问题找到一个最优算法 但是当子问题共享 子问题(重叠) 子问题)然后我可以使用动态 编程来解决问题 这是正确的吗 对。动态规划基本上是分治算法家族的一个特例,所有子问题都是相
动态规划为您提供最佳解决方案。
贪婪算法通常在很短的时间内给出一个好的/公平的解,但它不能保证达到最优 比方说,它是相似的,因为它通常将解决方案构造分为几个阶段,在这些阶段中,它会选择局部最优的方案。但是,如果阶段不是原始问题的最优子结构,那么通常不会得到最佳解决方案 编辑: 正如@rrenaud所指出的,有些贪婪算法已经被证明是最优的(例如Dijkstra、Kruskal、Prim等)。
因此,更准确地说,贪婪规划和动态规划的主要区别在于前者在解空间上不是穷举的,而后者是穷举的。
事实上,贪婪算法在这个空间上是短视的,在解决方案构建过程中所做的每一个选择都不会被重新考虑。动态程序使用自下而上的方法,保存以前的解决方案并引用它,这将允许我们在所有可用的解决方案中做出最优的解决方案,而贪婪方法使用自上而下的方法,因此,它从局部可用的解中获取最优解,而不会获取前一级的解,从而导致优化程度较低的解。 动态=自下而上,最佳解决方案
贪婪=自上而下,较少优化,较少耗时一些贪婪算法是最优的。考虑Dijkstra的最短路径算法或最大子阵和问题。贪婪算法往往不会在不同的可能性上分支,而动态规划算法往往会在不同的可能最优选择上分支,然后确定哪种选择是最好的。你能解释一下吗“动态规划基本上是分治算法家族的一个特例,所有子问题都是相同的。“我不明白这一点。子问题相同的意思?@grassPro:我的意思是,动态规划需要一个在相同类型的子问题中可分离的问题,因为你总是使用相同的例程递归地解决主问题和子问题。我学到的一条经验法则是,动态规划非常适合可以分解为“离散的、重叠的子集”。重叠的部分是动态规划工作的基础。