【二分】|二分答案,二分最使用方式,也是最实用的一种使用方式

一,二分答案类型

二分,我们常用的就是用它来查找某些东西,但是我们也可使用这种简单的算法来完成,一些答案的检索,二分答案实际上就是一种遍历的方法,你可以理解为他是一种时间复杂度位O(log2n) 的一种遍历方式,首先我们道的是他也是使用一个范围的数据进行遍历,也就是说在使用这个算法的时候,我们要首先的知道这个答案的数据范围,然后我们要写一个检验方式,来完成这个数据的检验操作,只要整个算法的时间复杂度不超过O(nlog2n) 就能正常运行,一般数据情况下。

二分答案我们也有相关的模板,他整个查找正确值的操作,实际上是和二分查找类似的,感兴趣的话可以先了解一下二分查找再完成二分答案的学习。

二分查找

二,二分答案代码

二分答案是相对比较简单的,我们把二分答案的代码划分成两个部分,一个部分就是专门的板子搜索,另一部分就是,相对有特性的 check 检查函数

1,板子搜索函数

#include <iostream>
using namespace std ;

int bsearch_1 (int l ,int r )
{
    
    
    while ( l < r)
    {
    
    
        int mid = ( l + r ) >> 1 ;
        if(chech(mid))//检查条件要为成立的时候
            r = mid ;
        else 
        l = mid + 1 ;
    }
    return r ;
}
//前缀二分答案: 完成之后我们再看一下是,后缀的,也就是每次遍历之后都把l确定的代码
int bsearch_2 (int l , int r )
{
    
    
    while ( l < r )
    {
    
    
        int mid = ( l + r + 1 ) >> 1 ; 
        if(check (mid ))    l = mid ;
        else  r = mid - 1 ;  
    }
    return l ; 
} 

int main ()
{
    
    

    //完成数据的输入输出
    //最后导入数据的范围

    return 0 ;
}

我们在板子搜索中理解到了一些东西,当我们在搜索中整个区间我们不是很确定的时候,我们可以把整个区间开大一点,最后我们也能取到,当然我们这些数据一定要有顺序性,这样我们才能使用二分答案的思路来进行求解。

2,check 函数

check 函数是一个检验的函数,这个函数才是解题的关键,有较强的自主性,按照题目来写。

猜你喜欢

转载自blog.csdn.net/wen030803/article/details/131736995
今日推荐