前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【算法】分治算法

【算法】分治算法

作者头像
半生瓜的blog
发布2023-05-13 13:35:41
3630
发布2023-05-13 13:35:41
举报
文章被收录于专栏:半生瓜のblog

分治算法

将一个规模为N的问题分解为k个较小的子问题,这些子问题遵循的处理方式就是互相独立且与原问题相同。

两部分组成

  • 分(divide):递归解决较小的问题。
  • 治(conquer):然后从子问题的解构建原问题的解。

三个步骤

  1. 分解(divide):将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题。
  2. 解决(conquer):若干子问题规模较小而容易被解决则直接解决,否则递归解决各个子问题。
  3. 合并(Combine):将各个子问题的解合并为原问题的解。

递归实现二分查找

代码语言:javascript
复制
#include<iostream>
using namespace std;

//递归实现二分查找
//找到这个值最后一级一级的传递return回来
int BinarySearch(int* arr,int minSub,int maxSub,int num)
{
	if (minSub > maxSub)//无解
	{
		return -1;
	}
	int mid = (minSub + maxSub) / 2;
	if (num == arr[mid])
	{
		return mid;
	}
	else if(num < arr[mid])
	{
		//因为中间数据arr[mid]大于num,所以新的范围从minSub到mid-1
		return BinarySearch(arr, minSub, mid - 1, num);
	}
	else//num > arr[mid]
	{
		//因为num大于中间数据arr[mid],所以新的范围从mid+1到maxSub
		return BinarySearch(arr, mid + 1, maxSub, num);
	}
}

int main(void)
{
	int arr[] = { 5,7,9,11,17,23,48,55,64 };
	//数组-起始位置(数组索引范围)-要查找的值
	int index = BinarySearch(arr,0,8,64);
	cout << index << endl;
	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分治算法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档