算法合集之分治算法及其应用算法

分治思想

自我理解:就是将一个大问题分成小问题,思想与递归很像,分而治之,也就是把一个问题,拆分成几个小问题,最后再汇总解决的方法,而且很多问题就是用递归解决,例如二分搜索(折半查找

经典问题
(1)二分搜索
(2)回文算法
(2)大整数乘法
(3)Strassen矩阵乘法
(4)棋盘覆盖
(5)合并排序
(6)快速排序
(7)线性时间选择
(8)最接近点对问题
(9)循环赛日程表
(10)汉诺塔

(1)二分搜索

切记注意递归的结束点以及切记条件是low<=high,如果没有带=号就会遗漏一个值!
时间复杂度:O(logn)

#include<stdlib.h>
#include<iostream>
#include<algorithm>
#include<Windows.h>
#include<math.h>
using namespace std;
int* n;   //时间复杂度:O(logn)

int bisearch(int m,int low,int high)
{
    
    
	if (low <= high)
	{
    
    
		int mid = (low + high) / 2;
		if (n[mid] == m)
			return 1;
		else if (n[mid] > m)
		{
    
    
			return bisearch(m, low, mid - 1);
		}
		else if (n[mid] < m)
		{
    
    
			return bisearch(m, mid + 1, high);
		}
	}
	else
	{
    
    
		return 0;
	}
}

回文

int  palindrome(string str, int m, int n)
{
    
    
	if (m > n)
	{
    
    
		return 1;
	}
	else
	{
    
    
		return (str[m] == str[n]) && palindrome(str, m + 1, n - 1);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_43978754/article/details/115051304