《入门经典》——6.26

Posted 黑大帅之家

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《入门经典》——6.26相关的知识,希望对你有一定的参考价值。

乘船问题:

  有n个人,第i个人重量为wi,每艘船的最大载重量均为C,且最多只能乘2个人。用最少的船装载所有人。

  分析:显然这道题考查我们对贪心法的理解。在很多问题中,往往是贪心策略的给出很容易但是证明却比较困难。这里我们将给出证明来开始尝试掌握对算法正确性的证明的几种方法。

  首先我们给出贪心策略,首先基于对n个人体重从小到大的排序,我们将没有上船的人设为集合A的元素。

从集合A中最小的元素i开始,令其上船。

如果A中没有元素能和i同船,那么令i单独一船。

否则,令能够和i乘船的所有元素中最大的那个元素j和其乘船。

 

贪心策略的证明:

考虑反证法,假设这种策略下我们得到的不是贪心策略,我们基于另外的最优解来开始进行讨论。

在假想的最优策略中

主要考虑一同乘船的i和k,则比存在某元素j,使得i+j≤n且k≤j,那么我们看到,如果将j和k交换,对于i乘坐的船必然不会受到影响,即贪心策略最起码会保留我们假想的最优解,同时,由于k比j小,存在这样的可能性,j原来单独乘船,但是k与其调换之后,可以使得另外的元素k’加入这条船,这就优化了我们假想的最优解,可见我们假想的最优解并不是最优解。

证毕。

以上是关于《入门经典》——6.26的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript入门经典的内容简介

推荐人工智能方向经典入门书籍?

C#入门经典Lambda

关于Python 的经典入门书籍都有哪些

关于Python 的经典入门书籍都有哪些

javascript入门经典(第五版)-清华出版社之“经典”错误