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

分治思想

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

经典问题
(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);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值