ACM寒假集训#3

本文介绍了二分查找的基本原理和实现细节,包括排序、中间值计算的注意事项以及在浮点数查找中的精度处理。通过示例展示了如何使用二分法在数组中查找目标值以及寻找方程的解。强调了二分查找相比遍历的优势在于其更高的时间效率。
摘要由CSDN通过智能技术生成

##第三天-----二分

二分主要就是查找,相比于遍历,二分的时间复杂度更小。
写二分时候,主要注意:
1.先排序 sort(a,a+n)/sort(a+1,a+1+n)(一般都是从小到大)

2.注意mid,right,left的取值:
a.如果用mid=(left+right)/2,在运行二分查找程序时可能溢出超时
因为如果left和right相加超过int表示的最大范围时就会溢出变为负数。
所以如果想避免溢出,不能使用mid=(left+right)/2
应该使用mid=left+(right-left)/2,同时long long mid;
(在计算机中(xy)/2可以表示为xy>>1,意思就是乘以2的一次方,<<n就是除以2的n次方,由于优先级,所以x*y不用括号)
b.right=mid 而 left=mid+1,如果是浮点数(比如求方程解)就均是=mid。

bool check(int x) {
	int l=1,r=n;
	while(l<r) {
		int mid=(r+l)/2;
		if(a[mid]==x)
			return 1;
		else if(a[mid]>x)
			r=mid;
		else
			l=mid+1;
	}
	return 0;
}//利用在数组中找x

3.关于继续查找的条件,一般是left<right
但是在浮点数查找的过程中,会考虑到精度问题,可以先宏定义一个
eps=1e-n,这个n就取决题目,一般n大一点好,条件就可以写成
left-right<eps

double find(double x) {                                                                                      
	double l=0,r=100,mid;
		while(r-l>=eps) {
		mid=(r+l)/2;
		if((Equation(mid))==x)
			return mid;
		else if(Equation(mid)>x)
			r=mid;
		else
			l=mid;
	}
	return mid;
}`//用二分找Equation方程在0到100的解

今天就写这么多,二分还是简单一些,呜呜明天搜索,据说很难,溜了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值