首页 > 其他分享 >二分

二分

时间:2023-01-19 20:34:05浏览次数:27  
标签:二分 int mid 缩小 区间 性质

二分

1.整数二分

用一个性质将区间分为满足性质和不满足性质,答案是二分的边界

情况一

代码分析
int bsearch_1(int l,int r)
{
    while (l < r)
    {
        int mid = l + r >> 1;
        if (check(mid)) r = mid; //如果mid满足性质缩小区间为[l,mid]
        else l = mid + 1; //如果mid不满足性质缩小区间为[mid+1,r]
    }
}
//最后输出l或r都行,因为二者相等
情况二

代码分析
int bsearch_2(int l,int r)
{
    while (l < r)
    {
        int mid = l + r + 1 >> 1;
        if (check(mid)) l = mid; //如果mid满足性质缩小区间为[mid,r]
        else r = mid - 1; //mid不满足性质缩小区间为[l,mid-1]
    }
}

2.浮点数二分

例:输出x的平方根,x可能为小数

代码分析
#include<iostream>

using namespace std;

int main()
{
    double x;
    cin >> x;

    double l = 0, r = x; //左右端点
    while (r - l > 1e-8) //l < r只要误差在1e-8即可
    {
        double mid = (l + r) / 2; //注意浮点数没有位运算
        if (mid * mid >= x) r = mid; //mid在答案的左边缩小区间为[l,mid]
        else l = mid; //在答案右边缩小区间为[mid,r]
    }

    cout << l; //输出l或r都行,二者相等
    return 0;
}

知识点

精度:精度eps至少需要比保留位数多2位

标签:二分,int,mid,缩小,区间,性质
From: https://www.cnblogs.com/mpmp/p/17062084.html

相关文章

  • 二分找函数答案
      E-TokitsukazeandFunction_2023牛客寒假算法基础集训营2(nowcoder.com)思路:可以知道这是一个凹型函数,但是不是严格中间小于两边可以三分  也可以......
  • 顺序查找和二分查找实验
    数据结构课上的一份实验报告主要是应对实验报告,应该存在逻辑错误的地方没改。#include<iostream>typedefintKeyType;typedefintInfoType;#defineMAXSIZE100......
  • 基础二分查找总结
    前言由于我在学习二分查找的过程中处于会了忘,忘了复习的状态,因此总结一套适合自己记忆的模板。建议先看参考资料\(^{[1,2,3]}\),理解二分查找各种细节的由来。二分查找......
  • 【PR #5 C】和平共处(整体二分)
    和平共处题目链接:PR#5C题目大意有n个黑点m个白点,黑点一开始都在,白点按一定顺序加入。问每次加入之后,你要选一些点删去(只是假设删去,并没有真正删去),使得不存在一个......
  • 二分算法查找模板
    这个是acwing站长YXC的模板https://www.acwing.com/file_system/file/content/whole/index/content/3073/版本1当我们将区间[l,r]划分成[l,mid]和[mid+1,r]时,其更......
  • 【数据结构与算法】二分查找算法(C++实现)
    两种写法,取决于划分规则。这两种写法是学的yxc的,至此以后,写二分查找再也不含糊了!yxc的分享在此:二分查找算法模板第一种写法:boolbinarySearch(vector<int>&nums,int......
  • 二分
    概述二分查找二分答案核心思路:把求解性问题变成naive的判定性问题。相当于是支付复杂度换可做性。分数规划考虑化式子,对于\(mid\),有\[\begin{aligned}&\dfr......
  • 【LeeCode】704. 二分查找
    【题目描述】给定一个 ​​n​​ 个元素有序的(升序)整型数组 ​​nums​​ 和一个目标值 ​​target​​  ,写一个函数搜索 ​​nums​​ 中的 ​​target​​,如果......
  • LeetCode寻找两个正序数组的中位数(vector/二分查找 划分数组)
    原题解题目给定两个大小分别为m和n的正序(从小到大)数组nums1和nums2。请你找出并返回这两个正序数组的中位数。算法的时间复杂度应该为O(log(m+n))。约束......
  • 【理论】整体二分思想
    整体二分是解决数据结构问题的一种重要方式。二分是较为基础的内容,在此不作提及,我们直接从一个数据结构问题的角度引入。现在有一个数据结构问题,其维护的结构的大小为\(......