贪心算法、分治算法和动态规划的区别

您所在的位置:网站首页 常见的解决问题的策略有什么法什么法什么法和什么法 贪心算法、分治算法和动态规划的区别

贪心算法、分治算法和动态规划的区别

2024-07-17 16:01| 来源: 网络整理| 查看: 265

贪心算法、分治算法和动态规划的区别

(1)分治法(divide and conquer method)

将原问题划分成若干个规模较小而结构与原问题相似的子问题,递归的解决这些子问题,然后再合其结果,就得到原问题的解。

特征:

该问题的规模缩小到一定的程度就很容易解决该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质利用该问题分解出的子问题的解可以合并为该问题的解;该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题

(2)动态规划(dynamic programing method)

与分治法相似,也是通过组合子问题的解而解决整个问题。区别是,动态规划适用于分解得到的子问题往往不是相互独立的(重叠的子问题)。在这种情况下如果采用分治法,有些子问题会被重复计算多次,动态规划通过记录已解决的子问题,可以避免重复计算。

要素:最优子结构、重叠子问题

(3)贪心法(greedy method)

贪心在解决问题的策略上目光短浅,只根据当前已有的信息就做出选择,而且一旦做出了选择,不管将来有什么结果,这个选择都不会改变。换言之,贪心法并不是从整体最优考虑,它所做出的选择只是在某种意义上的局部最优。这种局部最优选择并不总能获得整体最优解(Optimal Solution),但通常能获得近似最优解(Near-Optimal Solution)。

要素:贪心选择性质、最优子结构性质

动态规划的核心,先计算子问题,再由子问题计算父问题

贪心选择性质:一个全局最优解可以通过局部最(贪心)选择来达到。

1)分治法和动态规划法的区别

​ 共同点:二者都要求原问题具有最优子结构性质,都将原问题分成若干个子问题,然后将子问题的解合并,形成原问 题的解。

​ 不同点:动态规划法是将待求解问题分解成若干个相互重叠的子问题,而分治法是分解成若干个互不相交的子问题。利用分治法求解,这些子问题的重叠部分被重复计算多次。而动态规划法将每个子问题只求解一次并讲其保存在一个表格中,当需要再次求解此子问题时,只是简单地通过查表获得该子问题的解,从而避免了大量的重复计算。

动态规划适用于分解得到的子问题往往不是相互独立的。在这种情况下如果采用分治法,有些子问题会被重复计算多次,动态规划通过记录已解决的子问题,可以避免重复计算

2)动态规划法和贪心法的区别

共同点:

贪心算法和动态规划算法都要求问题具有最优子结构性质。

不同点:

动态规划算法中,每步所做的选择往往依赖于相关子问题的解,因而只有在解出相关子问题时才能做出选择。

而贪心算法,仅在当前状态下做出最好选择,即局部最优选择,然后再去解做出这个选择后产生的相应的子问题。

贪心无法解决动态规划的问题,但是动态规划能解决贪心的问题。虽然能够应用贪心算法一定能够应用动态规划法,但是一般来说,贪心算法的效率高于动态规划法,因而还是应用贪心算法。

动态规划算法通常以自底向上的方式解各子问题,而贪心算法则通常以自顶向下的方式进行,以迭代的方式作出相继的贪心选择,每做一次贪心选择就将所求问题简化为规模更小的子问题。



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3