利用二分法求值

本文95%的内容参考了博客:https://blog.csdn.net/baiyifeifei/article/details/79166686?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-1-79166686-blog-105912429.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-1-79166686-blog-105912429.pc_relevant_default&utm_relevant_index=1
题源:
约翰放牛
约翰理财
分馅饼

上面三个题都是:有N个数,要按照某种解法得出M(M<=N)个结果,求符合某种要求(比如这M个值中最小的值要求最大;或者最大的值要求最小;或者这M个值一样,求使得这M个一样的值最大的解法;…)这类题的结果是求出这个最值,因为根据常识,肯定会有最佳的解法,也就是说肯定有解,而且这个解有一个范围(比如约翰放牛,求两个牛之间的距离的最大值,题目是求这个最值,这个最值是两个牛之间的距离,那么其满足>=0 and <=最后一个木桩-第一个木桩,不管最终求得的结果是什么,其一定满足这个范围)我们在这个范围内求解,则可以利用二分法,关键是如何不断地缩短范围,可以根据二分法,在mid处判断是否满足某个要求,比如对于约翰放牛问题,当距离是mid时,也就是说两个牛之间的最小距离是mid,那么此时是否符合题目要求?即n个木桩,m头牛,之间的最小距离是mid,这个很好判断,根据给定的mid判断是否符合要求,如果不符合,则说明mid过大,那么下一次应该在左半部分搜索,否则符合,可以试着给大一点,在右半部分搜索,这样便可以缩小范围,符合二分法。

这类题目利用二分法时,关键在于如何缩短范围,即对于mid,如何判断是否符合某个条件并选择范围。再拿约翰理财来说,题目求的是m个值中最大值,并且使得这个最大值尽可能地小。那么当这个最值是mid,此时判断是否符合题意(即n个数,分成m份,这些m个小部分都<=mid?这个也好判断,根据每部分<=mid,去分,如果最后>m份,说明mid太小了,使得最后份数>m份了,即mid不符合题意)如果不符合提意,说明mid过小,那么取右半部分,否则取左半部分。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值