整型二分,浮点二分法 C++

整型二分是一种利用二分查找的算法,用于在一个已经有序的整型数组中查找某个给定的整数。首先,将数组的首尾两个位置记为left和right,分别表示当前要查询的区间的左右边界。然后,计算中间位置mid,将数组中间位置的值与目标整数比较。

  • 如果中间位置的值等于目标整数,那么找到了目标整数,返回位置mid。

  • 如果中间位置的值大于目标整数,那么说明目标整数可能在左半部分,将right更新为mid-1,缩小查询区间。

  • 如果中间位置的值小于目标整数,那么说明目标整数可能在右半部分,将left更新为mid+1,缩小查询区间。

然后,再次计算中间位置mid,并重复上述步骤,直到找到目标整数,或者区间缩小到无法再分割为止。

一定要注意l,r的范围!!!

复制代码
int findit(int q)
{
    int l = 0, r = n + 1; // 开区间;
    while (l + 1 < r)     // j+1==r时结束;
    {
        int mid = l + r >> 1;
        if (a[mid] <= q)
        {
            l = mid;
        }
        else
        {
            r = mid;
        }
    }
    return l;
}

浮点二分法(Floating Point Binary Search)是一种用于在浮点数上进行二分查找的方法。相比于整数的二分法,浮点二分法需要处理浮点数的精度和舍入误差。

浮点二分法的基本思想是通过将区间不断地二分,来逐步缩小查找范围,直到找到目标值或确定目标值不存在。

具体的步骤如下:

  1. 初始化左边界L和右边界R,使得目标值在[L, R]之间。

  2. 进行二分,计算中间值M = (L + R) / 2。

  3. 比较M与目标值的大小关系:

  • 如果M等于目标值,那么找到了目标值,返回M。

  • 如果M小于目标值,那么将L设为M,继续二分。

  • 如果M大于目标值,那么将R设为M,继续二分。

  1. 重复步骤2和3,直到找到目标值或区间缩小到无法再继续二分为止。

需要注意的是,由于浮点数的精度问题,如果要查找的目标值非常接近区间的边界,可能无法准确地找到目标值,而是得到一个非常接近但不完全相等的浮点数。因此,浮点二分法的结果通常需要进行额外的验证。

另外,在实际应用中,可能还需要设置一个终止条件来避免无限循环,例如在已知的精度范围内无法再继续缩小区间。

复制代码
#include <bits/stdc++.h>
#define ll long long
#define endl "\n"
#define KUI ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
using namespace std;
const int con = 2e5 + 4;
const int mod = 998244353;
int n, m, k;
void take()
{
    double x;
    cin >> x;
    double l = 0, r = x, mid = 0;
    while (r - l > 1e-4)
    {
        mid = (l + r) / 2.0;
        if (mid * mid >= x)
        {
            r = mid;
        }
        else
        {
            l = mid;
        }
    }
    cout << l << endl;
}
int main()
{
    KUI;
    int t1 = 1;
    while (t1--)
    {
        take();
    }
    return 0;
}
相关推荐
三川69826 分钟前
排序算法介绍
数据结构·算法·排序算法
zhangyao9403302 小时前
关于js导入Excel时,Excel的(年/月/日)日期是五位数字的问题。以及对Excel日期存在的错误的分析和处理。
开发语言·javascript·excel
骑驴看星星a2 小时前
【Three.js--manual script】4.光照
android·开发语言·javascript
2301_795167203 小时前
玩转Rust高级应用 如何避免对空指针做“解引用”操作,在C/C++ 里面就是未定义行为
c语言·c++·rust
星释3 小时前
Rust 练习册 :Leap与日期计算
开发语言·后端·rust
智驱力人工智能5 小时前
基于视觉分析的人脸联动使用手机检测系统 智能安全管理新突破 人脸与手机行为联动检测 多模态融合人脸与手机行为分析模型
算法·安全·目标检测·计算机视觉·智能手机·视觉检测·边缘计算
悟能不能悟5 小时前
java的java.sql.Date和java.util.Date的区别,应该怎么使用
java·开发语言
2301_764441335 小时前
水星热演化核幔耦合数值模拟
python·算法·数学建模
循环过三天5 小时前
3.4、Python-集合
开发语言·笔记·python·学习·算法
昌sit!7 小时前
Linux系统性基础学习笔记
linux·笔记·学习