贪心算法的证明一般是比动态规划要复杂。
原因是贪心算法的证明有两个,一个是最优子结构,另外一个是贪心选择性质。
贪心选择性质: 可以通过局部最优选择来构造全局最优解
证明:一般考虑某个子问题的最优解,然后考虑用一个贪心选择替换其中某个选择,修改此解,导出更小子问题。
最优子结构同动态规划,而且其实一般也不是特别需要证明,关键还是在证明问题具有贪心选择性质,下面是尝试证明。
1.活动选择问题
贪心选择性质的证明:假设一个子问题是Si,其一个最优解为Ai,(考虑一个子问题的最优解),我们选择子问题中最高结束的活动am(贪心选择),假设Ai中最早结束的活动我ae,如果ae=am,显然am在Ai中,如果ae>am,如果用am代替ae所得Ai’也还是最优解(代替),所以该子问题最优解可以表示为am+Si’最优解(拆分)。
大概证明步骤如下:子问题最优解,贪心选择,代替,拆分。
最优子结构的证明:假设Aij是活动i到j(不含j)的最优解,若Aij中包含ak,则可以将其划分为Aik+ak+Akj,反证法证明Aik、Akj都是最优解即可。