分治算法

简介: 分治算法


分治

分治,即“分而治之”

就是把原问题划分成若千个同类子问题,分别解决后,再把结果合并起来

关键点:

原问题和各个子问题都是重复的(同类的)一递归定义

除了向下递归“问题”,还要向上合并“结果”

分治算法- -般用递归实现

分治算法的"递归状态树”

实战

50.Pow(x, n)

https://leetcode.cn/problems/powx-n/

class Solution {
public:
    double myPow(double x, int n) {
        if(n==0) return 1;
        if(n == -(1ll << 31)) return 1.0/(myPow(x,-(n+1))*x);
        if(n < 0) return 1.0/myPow(x,-n);
        double temp = myPow(x,n/2);
        double ans = temp*temp;
        if(n%2==1) ans *=x;
        return ans;
    }
};
class Solution {
public:
    double myPow(double x, long long n) {
        if(n==0) return 1;
        //if(n==-(1ll<<31)) return 1.0/myPow(x,-(n+1)*x);
        if(n<0) return 1.0/myPow(x,-n);
        double temp=myPow(x,n/2);
        double ans = temp*temp;
        if(n%2 == 1) ans*=x;
        return ans;
    }
};

22.括号生成

https://leetcode.cn/problems/generate-parentheses/

分治划分子问题的标准:不重不漏

class Solution {
public:
    vector<string> generateParenthesis(int n) {
        if(n == 0) return {""};
        if(store.find(n) != store.end()) return store[n];
        vector<string> ans;
        for(int k=1;k<=n;k++)
        {
            vector<string> A = generateParenthesis(k-1);
            vector<string> B = generateParenthesis(n-k);
            for(string & a:A)
            {
                for(string & b:B)
                {
                    ans.push_back("(" + a + ")" +b);
                }
            }
        }
        store[n]=ans;
        return ans;
    }
private:
    unordered_map<int ,vector<string>> store;
};

推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习

相关文章
|
2月前
|
人工智能 自然语言处理 算法
当prompt策略遇上分治算法,南加大、微软让大模型炼成“火眼金睛”
【2月更文挑战第24天】当prompt策略遇上分治算法,南加大、微软让大模型炼成“火眼金睛”
25 2
当prompt策略遇上分治算法,南加大、微软让大模型炼成“火眼金睛”
|
5月前
|
算法
2017级《算法设计与分析》--实验1--分治算法-骨牌铺方格
2017级《算法设计与分析》--实验1--分治算法-骨牌铺方格
|
5月前
|
算法
2017级《算法设计与分析》--实验1--分治算法
2017级《算法设计与分析》--实验1--分治算法
|
3月前
|
算法
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-分治算法
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-分治算法
20 0
|
6月前
|
算法 JavaScript
分治算法
分治算法
51 0
|
7月前
|
人工智能 算法
【算法分析与设计】递归与分治策略(二)
【算法分析与设计】递归与分治策略
|
7月前
|
算法
算法:分治思想处理归并递归问题
算法:分治思想处理归并递归问题
|
7月前
|
机器学习/深度学习 算法 编译器
【算法分析与设计】递归与分治策略(一)
【算法分析与设计】递归与分治策略
|
4月前
|
存储 算法 搜索推荐
【算法系列篇】分治-归并
【算法系列篇】分治-归并
|
4月前
|
算法 搜索推荐 Java
【算法系列篇】分治-快排
【算法系列篇】分治-快排