算法设计与分析:时间复杂度和空间复杂度分析

一、算法分析

分析时间复杂度和空间复杂度

1.1算法执行时间相关因素

1.算法选用的策略
2.问题的规模
3.编写程序的语言
4.编译程序产生的机器代码的质量
5.计算机执行指令的速度

1.2如何估算算法的时间复杂度

算法的时间复杂度取决于问题的规模和待处理数据的初态

1.2.1基本概念

1.基本语句:基本语句是执行次数与整个算法的执行次数成正比的语句,基本语句对算法运行时的贡献最大
2.语句频度:语句重复执行的次数
3.一个算法中所有语句频度之和构成了该算法的运行时间
例如: for(j=1;j<=n;++j)   
    for(k=1;k<=n;++k)
      ++x;

 语句“++x、k<=n、++k”的频度是n2,
 语句“ j=1”的频度是1,
 语句“j<=n;++j 、k=1”的频度是n。
 算法运行时间为:3*n2+3n+1

1.2.2区分

1.运行时间不是时间复杂度
2.一个算法中的语句执行次数称为语句频度或时间频度,表示为T(n),n表示问题的规模
3.时间复杂度就是时间频度去掉低阶项和首项常数。
比如某个算法的时间频度时T(n)=10000nn+10n+3
但是时间复杂度时T(n)=O(nn)

1.2.3算法实例分析

非递归算法分析

1.仅依赖于“问题规模”的时间复杂度
例1:交换i和j的内容。
Temp = i; i = j; j = Temp;
T(n)=O(1);
执行时间不随着算法规模n的增长而增大,只是一个常数

2.变量计数之一。
      (1)  x=0;y=0;
      (2)  for(k=1; k<=n; k++)
      (3)      x++;
      (4)  for(i=1; i<=n; i++)
      (5)     for(j=1; j<=n; j++)
      (6)        y++;
该算法段的时间复杂度为T(n)=O(n2)。
结论:当有若干个循环语句时,算法的时间复杂度是由嵌套层数最多的循环语句中最内层语句的频度f(n)决定的。

3.变量计数之二。
 (1)  x=1;
 (2)  for(i=1; i<=n; i++)
 (3)     for(j=1 ; j<=i; j++)
 (4)        for(k=1; k<=j; k++)
 (5)           x++;
 该算法频度最大语句是5,按5计算复杂度
 O(n^3)

4.算法的平均复杂度是对T(n,k)的加权平均值

递归算法分析
1.猜测技术
2.扩展递归技术

递归方程为:T(n)=T(n-1)+O(1),其中O(1)为一次乘法操作。
迭代求解过程如下:
    T(n)=T(n-2)+O(1)+O(1)
            =T(n-3)+O(1)+O(1)+O(1)
             ……
            =O(1)+……+O(1)+O(1)+O(1)
            =n*O(1)
            =O(n)

在这里插入图片描述
3.通用分治递推式
在这里插入图片描述
在这里插入图片描述
常见关系
O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)
O(2n)<O(n!)<O(nn)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

出云coding

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

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

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

打赏作者

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

抵扣说明:

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

余额充值