419-分治算法思想

分治算法思想

在这里插入图片描述
划分的子问题要大于等于2
在这里插入图片描述
在这里插入图片描述
原问题的解是通过好几个子问题的解合并而来的。如果这个解对于原问题是属于最优解,那么它的解对于子问题的解来说是最优解。最优子结构!

二分搜索

我们对一组有序的序列采用的是二分搜索算法
在这里插入图片描述
先和中间的元素58比较,和58比较之后,划分子问题,以此类推。
比58大的在右边,比58小的在左边,然后每一个区间的左右下标相加除以2,以此类推,不断划分下去
在这里插入图片描述
分治算法:原问题的解是无法求出的,需要划分子问题,子问题小到解是已知的,再向上回溯,得到原问题的解。
在这里插入图片描述
子问题的求解方式和原问题一样!!!
划分的子问题没有重复计算!!!

//分治算法思想 - 二分搜索
bool binarySearch(vector<int>& vec, int i, int j, int val) {
	if (i > j) {//元素不存在
		return false;
	}

	int mid = (i + j) / 2;
	if (vec[mid] == val) {//子问题[i,j] 解是已知的了
		return true;
	}
	else if (vec[mid] > val) {//在[i, mid-1]子规模问题中
		return binarySearch(vec, i, mid - 1, val);
	}
	else {//在[mid+1, j]子规模问题中
		return binarySearch(vec, mid + 1, j, val);
	}
}
int main()
{
	vector<int> vec;
	for (int i = 0; i < 11; ++i) {
		vec.push_back(rand() % 100);
	}
	sort(vec.begin(), vec.end());
	for (int v : vec) {
		cout << v << " ";
	}
	cout << endl;

	bool result = binarySearch(vec, 0, vec.size() - 1, 34);
	cout << "result:" << result << endl;

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林林林ZEYU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值