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