一、分治算法分析
![](https://img-blog.csdnimg.cn/20210124223628102.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU0ODgyNjUx,size_16,color_FFFFFF,t_70)
1、分治算法解决问题的特征
分治法所能解决的问题一般具有以下几个特征:
(1)该问题的规模缩小到一定的程度就可以容易地解决;
(2)该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质;
(3)利用该问题分解出的子问题的解可以合并为该问题的解;
(4)该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。
2、分治算法的基本步骤
分治法解题的一般步骤:
(1)分解,将要解决的问题划分成若干规模较小的同类问题;
(2)求解,当子问题划分得足够小时,用较简单的方法解决;
(3)合并,按原问题的要求,将子问题的解逐层合并构成原问题的解。
二、经典分治算法面试题
1、求x的n次幂(对应leetcode第50题)
题目实例:求解x的n次幂。
输入: 2.00000, 10
输出: 1024.00000
class Solution {
public:
double quickMul(double x, long long N) {
//判断N是否为0
if (N == 0) {
return 1.0;
}
//进行递归迭代,取偶数结果
double y = q