| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【近乎万能】二分答案模板 & 学会理解掌握将无惧二分 -> 正文阅读 |
|
[数据结构与算法]【近乎万能】二分答案模板 & 学会理解掌握将无惧二分 |
前言博主在这几天刷算法的时候,被一些二分答案的题目几尽折磨,在苦苦刷题的时候从yxc大佬那里学到了新的二分模板,在对这个模板深入实践后,愈发感觉这个模板运用好几乎万能,所以在此时记录下我的一些新的理解,并对之前的博客相互印证。(二分查找细节讲解~~~~ 一、什么是二分答案比如说你要从一本英汉词典上查一个单词,你从头到尾一页一页的翻着找,这样找可以保证一定能找到,但是最坏情况你要把整本词典都翻一遍,那就麻烦了。 那有什么改进的方法吗?当然有。 考虑把这个词典从中间分开,看一下中间那一页的主要单词都是啥,然后去判断我要找的单词应该在左半部分还是右半部分,再去那一部分考虑怎么找就好了。同样的,在另一部分也是要进行划分并且判断的操作。这样一直进行下去,便能很快的找到答案,而且根本不需要翻过整个词典来。 我们把这个方法叫做“二分答案”。顾名思义,它用二分的方法枚举答案,并且枚举时判断这个答案是否可行。 二、算法介绍1.使用条件和适用情况二分并不是在所有情况下都是可用的,使用二分需要满足两个条件。一个是有界,一个是单调。 1.二分一般用来解决最优解问题 2.请大家务必弄清可行解和最优解的概念,这是我们掌握二分的关键 3.需要满足单调性的要求 2.代码模板我们的模板只有两个,我们只需要运用好这两个模板,可以解决掉几乎所有的二分。在此我们先介绍模板和怎么去运用,在最后我们在说明一下这份模板的一些细枝末节。 第一个模板是往左边查找,也就是答案包括在左边的情况
那很明显,这个就是往右边查找,也就是答案包括在右边的情况
3.例题解析好了上面说了那么多废话,大家估计可能也听得云里雾里的,现在我们直接运用在实战里,给大伙看个明白。 #P2440 木材加工 在这个题目里边,我们的目标值就是l,即每段小木头的最大长度,而它的范围,就是[0,max(L[i])] 。一段都没法切,那不就是0吗?能切的最大长度,那不就是那根最长的吗,max(L[i])。那我们二分模板中的l = 0,r = max(L[i])。那我们每次二分,只要判断这个长度能不能满足切出k段相同的木头,不就可以了吗?思路理顺后,我们来看看模板应该用哪个?也就是当我们找到一个可行解的时候,是应该往左呢,还是应该往右呢。根据题意很明显我们应该往右对不对?因为整个范围满足单调递增,而我们查找到一个可行解时,那么它不一定是最优解,我们要求的更大的最优解,那就应该往右查找。
最后附上题解,数据有点大,所以要记得使用longlong
例题2.
check函数的判断就很简单了,但是有个细节就是,根据题目给的公式,推出无论是升高还是降低都是e = 2 * e - a[i];且记得如果每次e都会乘以2,所以记得满足情况后就及时退出,否则longlong也会爆数据。
看完上面两个例题,相信大家应该能有所理解了,在最后我们解释一下模板里的代码细节。 为什么这两个模板能解决全部的二分呢? 为什么第二个模板需要mid = (l + r + 1) / 2? 总结最后我们总结一下,二分答案我们只需要找准目标值和目标边界,在根据题目要求选定模板,就能解决问题了。不过文章内容说的都是查找要求目标值的情况的,还有一些二分题目是不包括目标值的,比如蓝桥杯的递增三元组,但这类题目很少,只要把这两个模板掌握好,同样能处理好别的情况。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 19:57:04- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |