二分学习笔记

写在前面

二分是一种常用且非常精妙的算法,常常是我们解决问题的突破口。二分的基本用途是在单调序列或单调函数中做查找。因此当问题的答案具有单调性时,就可以通过二分把求解转化为判定。进一步地,我们还可以通过三分法解决单调函数的极值以及相关问题。

刷题进度

二分答案(2/4)

二分查找

问题解决进度

Q1


 

一、二分

二分法,在一个单调有序的集合或函数中查找一个解,每次分为左右两部分,判断在哪个部分中并调整上下界,直到找到目标元素,每次二分后都将舍弃一半的查找空间,因此效率很高。

显然,二分算法的复杂度为O(二分次数×单次判定复杂度)

……可怜的我依旧不会算复杂度QAQ……


二、二分核心代码

1.整数定义域

int work(int l,int r){int l=-INF,r=INF;//根据题目要求改变左右端点的初始值while(l<r){int mid=(l+r)>>1;if(check(mid+1)) l=mid+1;//如果符合要求就继续二分查找else r=mid;}return l;
}

2.实数定义域

double work(double l,double r){//根据题目要求确定精度dltdouble mid;while(fabs(l-r)>dlt){//实数比较大小,此句相当于l<r
//补充:fabs(x1)很abs(x2)都表示求绝对值,只不过x1是实数,x2是整数mid=(l+r)/2.0;if(check(mid)) r=mid;else l=mid;}return l;
}

TIP:如果指定二分的次数为t,那么对于初始的求解区间长度L,算法结束后r-l的值为L/2t


 

三、二分法常见模型

1.二分答案

最小值最大(或最大值最小)问题,这类双最值问题常常选用二分法求解,也就是确定答案后,配合贪心、DP等其他算法检验这个答案是否合理,将最优化问题转换为判定性问题。

【例 1】

将长度为n的序列分成最多m个连续段,求所有分法中每段和的最大值的最小是多少?

一些题目

LuoguP1024

LuoguP2678

LuoguP3957

Luogu二分答案

2.二分查找

用具有单调性的布尔表达式求解分界点。

【例 2】

在有序数列中求数字x的排名。

一些题目

Luogu二分查找

3.代替三分

有时,对于一些单峰函数,我们可以用二分导函数的方法求解函数极值,这时通常将函数的定义域定义为整数域求解比较方便。


 

四、典型例题

【例 1】愤怒的牛(Bzoj 1734)

1.题目大意

已知有n间牛舍和每间牛舍的位置,现在要求一种方案使得m头牛两两之间的最小距离尽可能大,求这个最大的最小距离。

2.思路

这是一道最大值最小化的典型题目。

设C(d)表示可以安排牛的位置,并使得最近的两头牛距离≥d

那么问题就转化为了求满足C(d)的最大的d,最近的间距≥d可以看成是所有间距都≥d,因此满足C(d)的条件就是任意两头牛的位置≥d

于是可以贪心求解:

<1>对牛舍的位置x进行排序

<2>把第一头牛放入x0的牛舍

<3>如果第i头牛放入了xj的牛舍,则第i+1头牛就要放入满足xj+d≤xk的xk最小的牛舍中

对x的排序只要在开始时进行一次就可以了,每一次判断对每头牛最多进行一次处理,因此算法的时间复杂度为O(nlogn)

3.代码

咕咕咕咕咕

【例 2】Best Cow Fences(Poj 2018)

1.题目大意

给定一个长度为n的正整数序列A,求一个平均数最大的,长度≥L的子序列。

2.思路

二分答案mid,合法的条件为“存在一个长度≥L的子序列,平均数≥mid”

如果把数列中的每个数都减去二分的值,合法的条件就转化为“存在一个长度≥L的子序列,子序列每一项相加的和≥0”

接下来就是着重解决两个问题:

<1>求一个子序列,要求和最大,没有“长度≥L”的限制

无长度限制的最大子序列和问题是一个经典问题,只需O(n)扫描该数列,不断地把新的数加入子序列,当子序列的和变成负数时,把当前的整个子序列清空。扫描过程中出现的最大子序列和即为所求。

<2>求一个子序列,要求和最大,且子序列的长度≥L

子序列和可以转化为前缀和相减的形式,即设sumi表示A1~Ai的和,则有:

maxi-j≥L{Aj+1+Aj+2+……+Ai}=maxL≤i≤n{sumi-min0≤j≤i-L{sumj}}

这个式子啥意思呀?QAQ

这个式子随着i的增长,j的取值范围0~i-L每次只会增加1。也就是说,每次只会有一个新的值进入min{sumj}的候选集合,所以没有必要每次循环枚举j次,只需要用一个变量记录当前最小值,每次与新的取值sumi-L取min就可以了。

解决了这两个问题后,我们只需要判断最大子序列和是不是非负数,就可以确定二分上下界的变化范围了。

3.代码

咕咕咕咕咕

转载于:https://www.cnblogs.com/THWZF/p/10365241.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252383.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ConcurrentHashMap 解读

初始化&#xff1a; 问题&#xff1a;如何当且仅只有一个线程初始化table 1 private final Node<K,V>[] initTable() {2 Node<K,V>[] tab; int sc;3 while ((tab table) null || tab.length 0) {4 if ((sc sizeCtl) < 0)5 …

BundleFusion那些事儿

背景&#xff1a;前面几篇博客中写了很多关于BundleFusion的东西&#xff0c;主要包括bundlefusion的论文阅读笔记&#xff0c;.sens数据集的生成等&#xff0c;经过最近几天的工作&#xff0c;我对bundlefusion又有了新的技术积累&#xff0c;在这里整理一下&#xff0c;也算是…

Oracle Study之--Oracle 11gR2通过RMAN克隆数据库

Oracle Study之--Oracle 11gR2通过RMAN克隆数据库Purpose of Database Duplication A duplicate database is useful for a variety of purposes, most of which involve testing. You can perform the following tasks in a duplicate database: Test backup and recovery pro…

手机录音ogg格式怎么转换mp3

Ogg这种音频格式刚出来的时候大家是非常热爱的&#xff0c;但是随着时代的发展&#xff0c;这种音频格式已经已经被取代了&#xff0c;现在呢走在音频格式前端的是MP3格式&#xff0c;这是大家都比较熟悉的&#xff0c;但是我们还是会经常下载到ogg这种格式的音频&#xff0c;就…

[机器学习] 推荐系统之协同过滤算法(转)

[机器学习]推荐系统之协同过滤算法 在现今的推荐技术和算法中&#xff0c;最被大家广泛认可和采用的就是基于协同过滤的推荐方法。本文将带你深入了解协同过滤的秘密。下面直接进入正题. 1. 什么是推荐算法 推荐算法最早在1992年就提出来了&#xff0c;但是火起来实际上是最近这…

BundleFusion代码框架讲解

背景&#xff1a;前面用了几篇文章来记录和总结了&#xff0c;我在研究bundlefusion过程中遇到的一些问题以及解决方法&#xff0c;本来想实现给bundlefusion输入先验轨迹&#xff0c;然后让其根据给定的轨迹进行重建&#xff0c;这样即便在环境比较恶劣的情况下&#xff0c;也…

BundlePhobia

1、BundlePhobia用于分析npm package的依赖、bundle后的大小、下载速度预估等等&#xff0c;帮助你在引用一个package之前了解引入该package的代价。 2、也可以将项目的package.json文件上传&#xff0c;BundlePhobia会帮你评估项目中所有包的大小和加载速度。

VFL演示样例

VFL演示样例 上篇文章向大家介绍了VFL的基本的语法点&#xff0c;假设对下面演示样例不熟的童鞋&#xff0c;能够前去參考。废话不多说。我们直接来看演示样例。演示样例一 将五个大小同样、颜色不同的view排成一行&#xff0c;view间的间隔为15px,第一个view的间隔与屏幕的左边…

ubuntu16.04 + ros-kinetic 配置cartographer

其实一直以来都感觉纯视觉SLAM很难落地产品&#xff0c;所以一直在找机会学习激光slam,之前也在深蓝学院上买了一个激光salm的课程&#xff0c;惭愧&#xff0c;至今也没开始学呢&#xff0c;年底之前&#xff0c;我想工作之余研究一下激光slam和ros&#xff0c;我感觉这两个东…

virtualbox中安装ubuntu

为什么80%的码农都做不了架构师&#xff1f;>>> virtualboxubuntu 安装virtualbox&#xff0c;当前版本是6.0.4下载ubuntu安装盘&#xff0c;建议lubuntu&#xff0c;链接是http://mirrors.ustc.edu.cn/ubuntu-cdimage/lubuntu/releases/18.04.2/release/lubuntu-1…

面向对象重写(override)与重载(overload)区别

一、重写&#xff08;override&#xff09; override是重写&#xff08;覆盖&#xff09;了一个方法&#xff0c;以实现不同的功能。一般是用于子类在继承父类时&#xff0c;重写&#xff08;重新实现&#xff09;父类中的方法。 重写&#xff08;覆盖&#xff09;的规则&#…

cartographer学习笔记--如何保存cartagrapher_ros建好的地图

今天开始跟着网友大佬学习cartographer. 1. 如何保存cartographer的地图数据 在运行cartographer过程中可以随时保存建好的地图&#xff0c;步骤如下&#xff1a; 首先是重新打开一个terminal, 如果你没有将你的cartographer_ros下的setup.bash文件写入到.bashrc中&#xff…

Java微信公众号开发(五)—— SVN版本控制工具

1 作用 两个疑问&#xff1a; 什么是版本控制&#xff1f;为什么要用版本控制工具&#xff1f;作用&#xff1a; 受保护受约束合作开发中&#xff0c;版本控制工具更重要的作用就是让开发者更好地协作&#xff0c;每个人的代码既能互相调用&#xff0c;来共同完成一个较大的功…

Linux之《荒岛余生》(二)CPU篇

为什么80%的码农都做不了架构师&#xff1f;>>> 温馨提示&#xff0c;动图已压缩&#xff0c;流量党放心查看。CPU方面内容不多&#xff0c;我们顺便学点命令。本篇是《荒岛余生》系列第二篇&#xff0c;垂直观测CPU。其余参见&#xff1a; Linux之《荒岛余生》&am…

Ubuntu16.04上安装kitti2bag

kitti2bag是一个可以将kitti数据集转换为bag文件的工具&#xff0c;可以直接通过pip进行安装。由于kitti2bag中使用到ros&#xff0c;所以安装时你使用的python版本应该是2.7的因为ros只有在Python2.7时才能正常工作。比如说我&#xff0c;我安装了conda&#xff0c;在conda中安…

UICollectionView 具体解说学习

UICollectionView 和UITableView非常像,是APPLE公司在iOS 6后推出的用于处理图片这类UITableView 布局困难的控件,和UITableView 一样,它也有自己的Datasource和delegate。以下具体说下像这种方式的效果. 首先来看看UICollectionView 的DataSource。protocol UICollectionView…

ServiceNow 中关于UI Action 在portal端的使用

在 portal端是可以使用Form和UI Action的&#xff0c;例如&#xff1a;var data.f $sp.getForm()&#xff1b;//需要添加上相应参数在开箱组件Form的Server script中就有如下代码&#xff1a;data.f $sp.getForm(data.table, data.sys_id, data.query, data.view);data.f对象中…

系统安全题目(二)

1、在 php mysql apache 架构的web服务中输入GET参数 index.php?a1&a2&a3 服务器端脚本 index.php 中$GET[a] 的值是&#xff1f;正确答案: C A 1B 2C 3D 1,2,3 2、以下哪些不是CSRF漏洞的防御方案&#xff1f;正确答案: D A 检测HTTPrefererB 使用随机tokenC 使用验…

ceres-solver学习笔记

前一段时间总有一个想法&#xff0c;那就是&#xff0c;我只直到视觉slam是远远不够的&#xff0c;激光slam仍然是一个比较稳妥的技术&#xff0c;好落地&#xff0c;应用广泛&#xff0c;我想着&#xff0c;如果我学会了会大大增加自己的核心竞争力&#xff0c;所以我抽时间开…

几款常见的视频格式转换器

在短视频占半壁江山的时候&#xff0c;关于体积、格式等成了困扰人们的因素&#xff0c;视频太大不利于传播&#xff0c;比如微信里就限制了传输的大小不得超过20M&#xff0c;所以其实说起来工作上QQ的性能远超微信。今天这里小编给大家总结几款常用的视频转换器&#xff0c;希…