如何证明贪心算法的正确性

  在使用贪心算法时,我们常常会通过直觉来得出贪心策略。可是,我们要如何来证明贪心策略的正确性呢?
  贪心算法解决的问题常常可以划分成多个子过程,我们对每个子过程采用相同的贪心策略可以实现全局的最优。这也是贪心算法与动态规划算法的区别——动态规划算法对于每个子过程选取相同的贪心策略无法实现全局的最优。
  当我们得到贪心策略时,我们很自然地会想到使用一种较暴力的方法,即证明对于每个子过程使用贪心策略能够实现全局最优。具体地,我们如何使用这种方法来证明贪心策略的正确性呢?我们常常是通过交换任意两个子过程然后证明交换后无法实现全局的更优来证明,这其实是反证法的应用,我们通过改变贪心策略然后证明改变后无法实现全局的更优从而来证明贪心策略的正确性。另一方面,我们也可以使用类似于数学归纳法的方法来证明贪心策略的正确性。我们首先可以证明对于一个初始的子过程实现贪心策略能够实现该子过程的最优。然后假设对于前n个子过程使用贪心策略能够实现前n个子过程的最优,通过该假设来证明前n+1个子过程使用贪心策略也能够实现最优,这样贪心策略的正确性便得以证明。这就是贪心算法常用的证明方法。

posted @ 2021-02-09 13:42  Polaris_Coding  阅读(1433)  评论(0编辑  收藏  举报