惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
The GitHub Blog
The GitHub Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
小众软件
小众软件
博客园_首页
G
Google Developers Blog
Apple Machine Learning Research
Apple Machine Learning Research
MyScale Blog
MyScale Blog
Engineering at Meta
Engineering at Meta
Jina AI
Jina AI
酷 壳 – CoolShell
酷 壳 – CoolShell
人人都是产品经理
人人都是产品经理
B
Blog RSS Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
D
Docker
B
Blog
雷峰网
雷峰网
WordPress大学
WordPress大学
Stack Overflow Blog
Stack Overflow Blog
宝玉的分享
宝玉的分享

faryou的博客

faryou的博客 faryou的博客 faryou的博客 faryou的博客 faryou的博客 faryou的博客-福建行小记 faryou的博客 faryou的博客 faryou的博客 faryou的博客 faryou的博客-夏令营小记 faryou的博客 faryou的博客 faryou的博客 faryou的博客-暑假阶段总结与展望 faryou的博客 faryou的博客 faryou的博客 faryou的博客 台风进行时 faryou的博客 limbo虚拟机初体验&安装Windows NT 4.0 faryou的博客 台风将来时 faryou的博客 faryou的博客 faryou的博客 faryou的博客 出租车上的对话 faryou的博客
【算法教程】【C/C++】二分答案——程序设计思路与代码实现
作者: faryou · 2024-06-15 · via faryou的博客

前言
事实上,我们在解决实际问题时一般会用二分答案而不是二分查找。今天我就来给大家介绍一下二分查找这种由二分法衍生出来的办法。

程序设计思路
相比于二分查找,二分答案有极为重要的一点不同——check思想。也就是说,每查到一个答案都将其经过特定的程序后再与基准数比较。这样看来,二分答案其实就是在二分查找的基础上加了一步检查。
二分查找往往是在一堆数里查找答案,而二分答案则通常面对一个范围,这也是它们之间的一显著区别。

代码实现
解方程中经常会用到二分答案,因为它的范围很广,而且往往包含浮点数答案。来看下面这题:
202408211724233857548796.png

    这题目明摆着要我们用二分答案,否则如果用浮点数试过去效率太低,容易TLE。看代码:
#include <bits/stdc++.h>
double a,b,c,d,l,m,r;//a、b、c、d如题意,l、m、r分别为左、中、右指针
double f(double x){//检查解是否合法,算一遍方程
    return a*pow(x,3)+b*pow(x,2)+c*x+d
}
int main(){
    scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
    for(int i=-100;i<100;i++){//由题意得有200个整数区间,分别查找
        l=i;
        r=i+1;
        if(f(l)==0){//特判,正好相等时直接输出
            printf("%.2lf ",l);
            continue;
        }
        if(f(l)*f(r)>=0) continue;//用题目中所给式子判断
        while(r-l>0.001){//不断缩小范围
            m=(l+r)/2;
            if(f(l)*f(m)<=0) r=m;
            else l=m+0.001;
        }
        printf("%.2lf ",m);
    }
    return 0;
}

代码中的f()函数就是所谓check思想。这样一来便很好理解了。

结语
二分答案作为二分算法的一个衍生分支,能够解决很多问题。我是faryou,再见!