经典算法-分治(二分查找案例)

前言

在介绍完递归枚举BF算法等经典算法后,今天来介绍的就是分治法

一、什么是分治法

在计算机科学中,分治法是一种很重要的算法。

字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并(百度百科)
在这里插入图片描述

二,分治法与递归的区分

递归是一种编程技巧,而分治法更像是解决问题的思维方式,使用分治法解决问题可以使用递归这种编程技巧来完成。两者的层面有一定的区别,分治法更偏向于解题的理论层面,而递归则偏向于解题的应用层面。

三、分治法的实例

二分查找:

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。就是将一个遍历查找过程分为两个从头中间和从未到中间的方式。

为了实现这个过程,要找到一个查找数组的靠中间位置,然后从两头遍历到中间来依次进行查找,这个可以减少时间复杂度:

//a为一个数组,target为要查找的目标数,low数组最低位,high为最高位
void Get(int *a,int target,int low,int high) 
{
    
    
    while(low<=high)
    {
    
            
        if(a[low]==target||a[high]==target)//若查找具体位置,判断分开即可
        {
    
    
            cout<<"Yes,find target";
            return;           
        }
        else
        {
    
    
            low++;
            high--;
        }
    }
    cout<<"Sorry,no find target";
}

总结

分治法总体而言是一种解决问题的思路,将大的问题分解为小的问题(分解后的小问题与大问题可以合并,或者说是相同类型的题),这样一直到一种可以简单求解的状态

猜你喜欢

转载自blog.csdn.net/xinzhilinger/article/details/109358611