二分和三分

二分:

二分,即为折半查找,它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

也就是说,二分的条件为必须满足数列或某一逻辑的顺序性,(单调

只有这样才能进行二分。

查找方法:

首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

适合题目:快速查找位置,查找函数零点。。。

三分:

三分,即为把一个有序序列分成3等份,然后比大小,舍去其中最不满足条件的一部分继续三分;

适用范围:查找函数峰值,顶点

步骤:

1、先把整个区间的n/3的值lmid←n/3+ left。

2、再取右侧区间的中间值rmid←lmid+right,从而把区间分为三个小区间。

3、我们A[lmid]的值与x进行比较,如果相等就直接输出lmid结束算法,x比A[lmid]的值大我们就舍弃左区间进入第四步,否则我们舍弃右区间right←lmid,重复1,2,3。

4. 我们A[rmid]与x进行比较,如果相等就直接输出rmid结束算法,x比A[rmid]的值大我们就舍弃左区间 left←rmid,重复1,2,3,否则我们舍弃右区间left←lmid,right←rmid,重复1,2,3

详情请见一本通提高版。

原文地址:https://www.cnblogs.com/lbssxz/p/10992986.html

时间: 2024-08-01 15:04:20

二分和三分的相关文章

ACM之路(1)——对二分及三分的研究

对于二分来说,个人暂且将其分为整数型和实数型.      对整数型而言,一般问题对于(low<=high)条件的判断取等号即可,因为在while途中查找遇到可匹配的便break,比方说二分查找已排序的数列.但是有些问题并不是这样的,在此分为两类:取最大值的min,和取最小值的max.      对于前一种,要用<(即不断往下推得最优解),而后一种要用<=(即不断往上推得最优解).同时,若对于前一种情况而言,因为要取最小的最优解,那么即使取中的mid可以满足条件仍要将high=mid-1以

二分与三分(精度类型)

二分:传送门 三分:传送门 (注意,是五舍六入,不是四舍五入,在2018年10月23日前是这样的) 话说一本通上不是有讲嘛,做法自己看吧...(但是我太弱了,精度版看不懂QWQ). 简单讲一下二分与三分吧. 二分:必须满足单调性: 非增或非减就叫单调性(如果就好几个数相同,一般会用二分来找第一个数或最后一个数). 我们用两个数字l与r来代表搜索范围,而mid代表中间的位置的值,来跳来跳去,看情况来写. 如这题 int l=1,r=n,mid,ans=0; while(l<=r) { mid=(l

二分与三分

(写的很早忘了发布了...)今天高二的学长学姐们进行了二分和三分的测试(又名一本通课后题测试),感觉这个好有意思~ 关于什么是二分,三分,先咕咕咕了,来看一道题. 灯泡:https://loj.ac/problem/10016 题意概述:给出$H,h,D$,求阴影的最长长度(包括地上的和墙上的). 有种初中数学的既视感. 解:设灯泡为$A$,人头为$B$,连接$AB$并延长,与地面的延长线交于点$C$. 于是就结束了...吗? 还有一种可能就是影子并没有到墙上去,但是影响不大,两个函数叠加起来还

【信息学奥赛一本通】Part1.2 基础算法-二分与三分

问题 A: [二分和三分]愤怒的牛 题目描述 农夫约翰建造了一座有n间牛舍的小屋,牛舍排在一条直线上,第i间牛舍在xi的位置,但是约翰的m头牛对小屋很不满意,因此经常互相攻击.约翰为了防止牛之间互相伤害,因此决定把每头牛都放在离其它牛尽可能远的牛舍.也就是要最大化最近的两头牛之间的距离. 牛们并不喜欢这种布局,而且几头牛放在一个隔间里,它们就要发生争斗.为了不让牛互相伤害.John决定自己给牛分配隔间,使任意两头牛之间的最小距离尽可能的大,那么,这个最大的最小距离是多少呢? 输入 第一行用空格分

ACM : HDU 2899 Strange fuction 解题报告 -二分、三分

Strange fuction Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5933 Accepted Submission(s): 4194 Problem Description Now, here is a fuction: F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100) C

hdu 2899 凸性 二分 / 三分

Strange fuction Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7230    Accepted Submission(s): 4996 Problem Description Now, here is a fuction:  F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=

《算法竞赛进阶指南》学习总结 二分与三分

首先......我是一个很菜很菜的萌新,所以这篇文章写得很详细,有很多我自己的口水话方便我理解,请各位谨慎食用qwq 以前在网上找过很多介绍二分的博客,但都感觉对萌新不太友好,反正我当时连跳石头都没看懂,所以决定自己写一篇!其中有我的想法,也借鉴了书里的很多内容,感谢lyd. 二分答案,顾名思义,就是对我们所需要的答案进行二分,对我们要求的值进行二分.二分的基础用法是在单调序列或者单调函数当中查找,当答案具有单调性,我们就可以采用二分来计算,当然还有三分,在后面我会详细讲到 整数集合上的二分 在

【信息学奥赛一本通 提高组】第二章 二分与三分

一.二分 二分法,在一个单调有序的集合或函数中查找一个解,每次分为左右两部分,判断解在那个部分并调整上下界,直到找到目标元素,每次二分都将舍弃一般的查找空间,因此效率很高. 二分常见模型 1.二分答案 最小值最大(或是最大值最小)问题,这类双最值问题常常选用二分法求解,也就是确定答案后,配合贪心,DP等其他算法检验这个答案是否合理,将最优化问题转化为判定性问题.例如,将长度为n的序列ai分为最多m个连续段,求所有分法中每段和的最大值的最小是多少? 2.二分查找 用具有单调性的布尔表达式求解分界点

2019年8月训练(壹)二分,三分

二分查找 P1024 一元三次方程求解 题目给出范围[-100,100],同时两根绝对值之差<=1,保证了每一个大小为1的区间里至多有1个解,也就是说当区间的两个端点的函数值异号时区间内一定有一个解,同号时一定没有解. 也就可以二分去做查找. AC码: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; double a,b,c,d; double f(double