算法设计分析基础复习

什么是算法?

算法 : 是对特定问题求解步骤的一种描述,是指令的有限序列

此外,构成算法的求解步骤必须满足以下条件: 1. 有穷性;  2. 确定性;  3. 可行性。  

算法分析基本概念

算法复杂性(Algorithm Complexity ) 算法复杂性的高低体现在运行该算法所需计算机资源的多少. 计算机中最重要的两种资源是时间和空间资源。更确切地说,算法的复杂性是算法运行所需要的计算机资源的量,需要的时间资源的量称为时间复杂性;需要的空间资源的量称为空间复杂性,如下:  时间复杂性(Time Complexity)   空间复杂性(Space Complexity。

算法分析:指的是对算法所需的两种计算机资源—时间和空间进行估算,所需要得资源越多,该算法的复杂度就越高。

输入规模与基本语句

基本语句:执行次数与整个算法的执行次数成正比的操作指令。 对 算法运行时间贡献最大,是算法中最重要的操作。

输入规模:输入量的多少。运行算法需要的时间是T是输入 规模 n 的函数,记为 T=T(N)。

for (i=1; i<=n; i++)
    for (j=1; j<=n; j++)
         x++;

问题规模:n 基本语句:x++

最好、最坏和平均情况

基本语句的执行次数是否只和问题规模有关?

有些算法的时间代价只依赖于问题的输入规模,而与输入的具体数据无关。如上例合并算法。但有些算法,即使输入规模相同,如果输入数据不同,其时间代价也不相同。

例 :  在一维整型数组A[n]中顺序查找与给定值 k 相等的元素。

 int Find(int A[ ], int n, int k) 
 {
      for (i = 0; i < n; i++)
          if (A[i] == k) break;
      return i;	
 }

如果算法的时间代价与输入数据有关,则需要分析最好情况、最坏情况、平均情况。

以上三种情况下的时间复杂性, 各从某一个角度来反映算法的效率,各有各的用处,也各有各的局限性。但实践表明可操作性最好的,且最有实际价值的,是最坏情况下的时间复杂性。 一般来说, 最好情况和最坏情况的时间复杂性是很难计量的。有时也按平均情况计量时间复杂性,但要对输入不同数据的概率做人为的假设(一般是假设等概率)之后才能进行, 所做的假设缺乏必要的根据。因此,在最好情况和平均情况下的时间复杂性分析还仅仅是停留在理论上。

非递归算法分析的一般步骤

1. 决定用哪个(或哪些)参数作为算法问题规模的度量    2. 找出算法中的基本语句   3. 检查基本语句的执行次数是否只依赖于问题规模    4. 建立基本语句执行次数的求和表达式    5. 用渐进符号表示这个求和表达式。

对递归算法时间复杂度的分析,关键是根据递归过程建立递推关系式,扩展递归是一种常用的求解递推关系式的基本技术。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值