【c++】分治算法

本文详细介绍了分治算法的概念及其三个步骤,通过实例讲解了二分思想在最大数和最小数求解中的应用,并探讨了归并排序的原理和实现。此外,还涉及到了二分查找的应用以及快速幂运算。
摘要由CSDN通过智能技术生成

                                           分治策略

分治法,又叫分治策略,顾名思义,分而治之。它的基本思想为:对于难以直接解决的规模较大的问题,把它分解成若干个能直接解决的相互独立的子问题,递归求出各子问题的解,再合并子问题的解,得到原问题的解。通过减少问题的规模,逐步求解,能够明显降低解决问题的复杂度。

 能使用分治法解决的问题,它们一般具备以下几个特征:

①该问题可以分解成若干相互独立、规模较小的相同子问题;

②子问题缩小到一定的程度能轻易得到解;

③子问题的解合并后,能得到原问题的解;分治法在信息学竞赛中应用非常广泛,使用分治策略能生成一些常用的算法和数据结构,如快排、最优二叉树、线段树等;

还可以直接使用分治策略,解决一些规模很大、无法直接下手的问题。

分治的三步骤

①分解:将要解决的问题分解成若干个规模较小的同类子问题;

②解决:当子问题划分得足够小时,求解出子问题的解。

③合并:将子问题的解逐层合并成原问题的解。

在划分问题时,可以采用递归法,把一个大问题逐步分解成规模较小的子问题,直至可以直接求出子问题的解;再将子问题逐层合并,返回到顶层,得到原问题的解。根据分治法的划分原则,把原问题划分成多少个子问题才适合呢?各个子问题的规模应该多大才适合呢?一般来说,每次划分成2个子问题,每个子问题的规模差不多最合适。合并解时要因题而异,有些问题递归分解完能直接得到原问题的解,有些问题需逐层合并,得到原问题的解

首先我们学习二分思想

【例1】最大数和最小数

【问题描述】给你n(n<=100000)个整数,要求你求出其中的最大数和最小数。

【文件输入】共计两行:第一行为一个整数n,第二行为n个整数,均不超过200000000。

【文件输出】输出只有一行最大数和最小数,用一个空格分开。

【样例输入】

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Hear the Wind Sing.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值