【算法设计与分析·复习】第二章-递归||时间复杂度计算||自食用

step by step.

目录

一、 递归:直接或间接地调用自身的算法

递归时间复杂度计算

二、 例2-4 排列问题

2-4 排列问题算法思路

2-4 排列问题算法代码

三、 2-5 整数划分问题

2-5 整数划分算法思想 


一、 递归:直接或间接地调用自身的算法 

递归时间复杂度计算

递归算法的时间复杂度分析_兜里有包包-CSDN博客_递归的时间复杂度递归算法的时间复杂度分析在算法分析中,当一个算法中包含递归调用时,其时间复杂度的分析会转化为一个递归方程求解。实际上,这个问题是数学上求解渐近阶的问题,而递归方程的形式多种多样,其求解方法也是不一而足,比较常用的有以下三种方法: 方法一:代换法猜答案,不需要具体猜系数的准确值,只需猜出它的形式,比如猜一个递归式的时间复杂度大概是O(n2),即它的运行时间应该是一个常数乘以n2,可能还会有一些低阶项...https://blog.csdn.net/d2457638978/article/details/46958775?ops_request_misc=&request_id=&biz_id=102&utm_term=%E9%80%92%E5%BD%92%E6%97%B6%E9%97%B4%E5%A4%8D%E6%9D%82%E5%BA%A6&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-46958775.first_rank_v2_pc_rank_v29&spm=1018.2226.3001.4187

 例题:

二、 例2-4 排列问题

设计一个递归算法生成n个元素{r1,r2,,rn}全排列

R={r 1 ,r 2 , , r n } 是要进行排列的 n 个元素, R i =R-{ r i }。
集合 X 中元素的全排列记为 perm(X)。
( r i )perm(X) 表示在全排列 perm(X)的每一个排列前加上前缀得到的排列。

2-4 排列问题算法思路

 👇

  T(n) = O(n!) 

 

2-4 排列问题算法代码

void Perm( Type list[], int k, int m)
{
    if(k==m){
        for(int i=0; i<=m; i++)
            cout<<list[i];
        cout<<endl;
    }
    else{
        for(int i=k; i<=m; i++){
            swap(list[i],list[k]); //定开头
            Perm(list,k+1,m);      //排后序
            swap(list[i],list[k]); //恢复原序列
        }
}

三、 2-5 整数划分问题

将正整数n表示成一系列正整数之和:n=n1+n2++nk

其中: n1≥n2≥nk≥11≤k≤n

正整数n的这种表示称为正整数n的划分。

求正整数n的不同划分个数。

例如正整数6有如下11种不同的划分:
    6;
    5+1;
    4+2,4+1+1;
    3+3,3+2+1,3+1+1+1;
    2+2+2,2+2+1+1,2+1+1+1+1;
    1+1+1+1+1+1。

2-5 整数划分算法思想 

(1)q(n,m)=1,(m=1,n=1);

n=1说明1的加数其实不就自己吗,m=1说明最大加数是1,那不也是只有一种吗,狂加1。

就是比如👉q(6,1)👉6=1+1+1+1+1+1;👉一种方式👉q(6,1)=1

(2) q(n,m)=q(n,n),(n<m;

最大加数其实只能<自身,不然无效,换为q(n,n)

就是比如👉q(6,7)👉不然你还得6=7-1?×👉q(n,m)=q(n,n)

(3) q(n,m)=1+q(n,n-1) (m=n);

正整数n的划分由n1=n的划分和n1≤n-1的划分组成。+1是因为:最大加数是自身,仅一种。

就是比如👉q(6,6)👉6=6;……👉一种(等于自身)+其他加数👉q(6,6)=1+q(6,5)

(4) q(n,m)=q(n,m-1)+q(n-m,m),(n>m>1);

正整数n的最大加数n1不大于m的划分由n1=m的划分和n1≤m-1 的划分组成

就是比如👉q(6,4)👉6=4+……👉最大加数小于4的划分种数+(6-4)的划分种数👉q(6,4)=q(6,3)+q(2,4)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值