「学习笔记」分治

二分#

常见的二分一般有两种:二分查找和二分答案
二分查找一般是在一个有序数组内使用二分查找元素,当然也可以直接用 STL 中的 lower_boundupper_bound 来做。有一些数据结构可以较快的二分查找,比如线段树、平衡树。
二分答案是指对于一道题,它的答案具有某种单调性,在直接求答案不好求的时候,我们可以对答案进行二分,变为判定性问题。
一般模板

while (l <= r) {
	int mid = (l + r) >> 1;
	if (check(mid)) {
		ans = mid;
		l = mid + 1;
	}
	else {
		r = mid - 1;
	}
}
while (l <= r) {
	int mid = (l + r) >> 1;
	if (check(mid)) {
		ans = mid;
		r = mid - 1;
	}
	else {
		l = mid + 1;
	}
}

三分#

如果需要求出单峰函数的极值点,通常使用二分法衍生出的三分法求单峰函数的极值点。
下面是一种写法

db l = 0, r = 1000.0, ans = 0;
while (r - l >= eps) {
	db len = (r - l) / 3;
	db fl = f(l + len), fr = f(r - len);
	if (fl > fr) {
		l = l + len;
		ans = l;
	} else {
		r = r - len;
		ans = r;
	}
}

作者:yifan0305

出处:https://www.cnblogs.com/yifan0305/p/17157804.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

转载时还请标明出处哟!

posted @   yi_fan0305  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示