Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 分而治之,动态规划和贪婪算法!_Algorithm - Fatal编程技术网

Algorithm 分而治之,动态规划和贪婪算法!

Algorithm 分而治之,动态规划和贪婪算法!,algorithm,Algorithm,当我有一个具有最优子结构的问题,并且没有子问题共享子问题,那么我可以使用分治算法来解决它 但是当子问题共享子问题(重叠子问题)时,我可以使用动态规划来解决这个问题吗 这是正确的吗 贪婪算法与动态规划有何相似之处 当我遇到优化问题时 子结构和无子问题共享 子问题,然后我可以使用除法 而征服算法能解决吗 是的,只要你能为每一类子问题找到一个最优算法 但是当子问题共享 子问题(重叠) 子问题)然后我可以使用动态 编程来解决问题 这是正确的吗 对。动态规划基本上是分治算法家族的一个特例,所有子问题都是相

当我有一个具有最优子结构的问题,并且没有子问题共享子问题,那么我可以使用分治算法来解决它

但是当子问题共享子问题(重叠子问题)时,我可以使用动态规划来解决这个问题吗

这是正确的吗

贪婪算法与动态规划有何相似之处

当我遇到优化问题时 子结构和无子问题共享 子问题,然后我可以使用除法 而征服算法能解决吗

是的,只要你能为每一类子问题找到一个最优算法

但是当子问题共享 子问题(重叠) 子问题)然后我可以使用动态 编程来解决问题

这是正确的吗

对。动态规划基本上是分治算法家族的一个特例,所有子问题都是相同的

贪婪算法有什么相似之处 动态规划

它们是不同的。
动态规划为您提供最佳解决方案。
贪婪算法通常在很短的时间内给出一个好的/公平的解,但它不能保证达到最优

比方说,它是相似的,因为它通常将解决方案构造分为几个阶段,在这些阶段中,它会选择局部最优的方案。但是,如果阶段不是原始问题的最优子结构,那么通常不会得到最佳解决方案

编辑:

正如@rrenaud所指出的,有些贪婪算法已经被证明是最优的(例如Dijkstra、Kruskal、Prim等)。
因此,更准确地说,贪婪规划和动态规划的主要区别在于前者在解空间上不是穷举的,而后者是穷举的。

事实上,贪婪算法在这个空间上是短视的,在解决方案构建过程中所做的每一个选择都不会被重新考虑。

动态程序使用自下而上的方法,保存以前的解决方案并引用它,这将允许我们在所有可用的解决方案中做出最优的解决方案,而贪婪方法使用自上而下的方法,因此,它从局部可用的解中获取最优解,而不会获取前一级的解,从而导致优化程度较低的解。 动态=自下而上,最佳解决方案
贪婪=自上而下,较少优化,较少耗时

一些贪婪算法是最优的。考虑Dijkstra的最短路径算法或最大子阵和问题。贪婪算法往往不会在不同的可能性上分支,而动态规划算法往往会在不同的可能最优选择上分支,然后确定哪种选择是最好的。你能解释一下吗“动态规划基本上是分治算法家族的一个特例,所有子问题都是相同的。“我不明白这一点。子问题相同的意思?@grassPro:我的意思是,动态规划需要一个在相同类型的子问题中可分离的问题,因为你总是使用相同的例程递归地解决主问题和子问题。我学到的一条经验法则是,动态规划非常适合可以分解为“离散的、重叠的子集”。重叠的部分是动态规划工作的基础。