此部分包括:
特点
两大性质:贪心选择性质、最优子结构性质
贪心算法与动态规划算法的异同
算法正确性证明
贪心算法基本步骤
----------------------------------------------------------------------------------------------------
特点
设计要素:
(1)适用于组合优化的问题
(2)求解过程是多部判断过程,最终的判断序列对应问题的最优解
(3)依据某种“短视的”贪心选择性质判断,性质好坏 决定算法的成败
(4)贪心法必须进行正确性证明.
(5)证明贪心法不正确的技巧:举反例.
优势:算法简单,时间和空间复杂性低
两大性质
贪心选择性质
贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到
是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区 别 :
• 动态规划算法通常以自底向上的方式解各子问题
• 贪心算法则通常以自顶向下的方式进行,以迭代的方式作出相继的贪心选择,每作一次贪心选择就将所求问题简化为规模更小的子问题
• 对于一个具体问题,要确定它是否具有贪心选择性质,必须证明每一步所作的 贪心选择最终导致问题的整体最优解。
最优子结构性质
最优子结构性质:问题的最优解包含其子问题的最优解
最优子结构性质是该问题可用动态规划算法或贪心算法求解的关键特征
贪心算法与动态规划算法的异同
贪心算法和动态规划算法共同点:最优子结构性质
但具有最优子结构性质的问题也要分情况讨论看两者谁更适合
不同点:
动态规划算法:
每一步都要做选择
此选择取决于子问题的解
是自底而上,从小到大的。
贪心算法:
先做出一个贪心选择,解决由选择导出的子问题
做的选择取决于前面的选择,而不是子问题的解
自顶而下,问题逐步减少
算法正确性证明
基础:
算法正确性归纳证明:
证明步骤:
- 叙述一个有关自然数n的命题,该命题断定该贪心策略的执行最终将导致最优解. 其中自然数n 可以代表算法步数或者问题规模.
- 证明命题对所有的自然数为真. 归纳基础(从最小实例规模开始) 归纳步骤(第一或第二数学归纳法)