- 170
- 0
- 约10千字
- 约 27页
- 2018-06-28 发布于福建
- 举报
第七章 分治算法 所谓分治就是指的分而治之,即将较大规模的问题分解成几个较小规模的问题,通过对较小规模问题的求解达到对整个问题的求解。当我们将问题分解成两个较小问题求解时的分治方法称之为二分法。 你们玩过猜数字的游戏吗?你的朋友心里想一个1000以内的正整数,你可以给出一个数字x,你朋友只要回答“比x大”或者“比x小”或者“猜中”,你能保证在10次以内猜中吗?运气好只要一次就猜中。 开始猜测是1到1000之间,你可以先猜500,运气好可以一次猜中,如果答案比500大,显然答案不可能在1到500之间,下一次猜测的区间变为501到1000,如果答案比500小,那答案不可能在500到1000之间,下一次猜测的区间变为1到499。只要每次都猜测区间的中间点,这样就可以把猜测区间缩小一半。由于 ,因此不超过10次询问区间就可以缩小为1,答案就会猜中了,这就是二分的基本思想。 每一次使得可选的范围缩小一半,最终使得范围缩小为一个数,从而得出答案。假设问的范围是1到n,根据 ,所以我们只需要问O(logn)次就能知道答案了。 需要注意的是使用二分法有一个重要的前提,就是有序性,下面通过几个例子来体会二分法的应用。 例7.1 找数 描述: 给一个长度为n的单调递增的正整数序列,即序列中每一个数都比前一个数大。有m个询问,
原创力文档

文档评论(0)