44、算法复杂度简介

 数据结构是问题的数学模型。 程序设计的实质是对实际问题选择一种好的数据结构,加之设计一个好的算法。 算法(解决问题的方法)处理的对象就是数据。算法与数据的结构密切相关,算法无不依附于具体的数据结构,数据结构直  接关系到算法的选择和效率。程序设计的实质是对实际问题选择一种好的数据结构,加之设计一个好的算法。

一、基本概念

1、数据:是对信息的一种符号表示——人们利用文字符号、数字符号以及其他规定的符号对现实世界的事物及其活动所做的描述。

2、数据元素:是数据(集合)中的一个“个体”,是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 

3、数据项(data item):是数据结构中讨论的“最小单位”。 

4、数据对象(Data Object):是性质相同的数据元素的集合,是数据的一个子集。

5、数据结构(Data Structure): 是相互之间存在一种或多种特定关系的数据元素的集合。

6、结构:数据元素之间的相互关系。

   四种基本结构:集合,线性结构,树型结构,图状结构或网状结构。

二、好的算法的要求

1、算法的正确性:有穷性,确定性,可行性,输入,输出。

2、好的算法的要求目标:正确性,可读性,健壮性,效率与低存储要求。

三、好的算法的度量

    与算法执行时间相关的因素有: 1)、算法选用的策略。2)、问题的规模 

3)、编写程序的语言。4)、编译程序产生的机器代码的质量。5)、计算机执行指令的速度。

一般认为算法的效率只依赖于问题的规模。任何一个算法都是由一个控制结构和若干原操作组成的。控制结构:顺序、分支和循环 3 种。原操作:指对固有数据类型(高级语言中的数据类型)的操作(如赋值操作、转向操作、比较操作等等),显然每个原操作的执行时间和算法无关,相对于问题的规模是常量。

算法的执行时间可看成是所有原操作的执行时间之和。

1、时间复杂度

算法中包含原操作次数的多少叫做算法的时间复杂度,用它来衡量一个算法的运行时间性能。 

如果存在两个正常数c和n0,对于所有的 n>=n0,有| f(n) |<=c | T(n)|则称 f(n) 是 T(n) 的同数量级函数。把 T(n) 表示成数量级的形式为:T(n)=O(f(n))。称O(f(n)) 为算法的渐近时间复杂度,简称时间复杂度。

     

有时候,算法中基本操作重复执行的次数还随问题的输入数据集不同而不同,如在冒泡排序中,输入数据有序而无序,其结果是不一样的。此时,我们计算平均值。

常见的算法的时间 复杂度之间的关系为:

O(1)<O(log n)<O(n)<O(nlog n)<O(n2)<O(2n)<O(n!)<O(nn)  

当 n 很大时,指数阶算法和多项式阶算法在所需时间上非常悬殊。因此,只要有人能将现有指数阶算法中的任何一个算法化 简为多项式阶算法,那就取得了一个伟大的成就。

2、空间复杂度

   空间复杂度:算法所需存储空间的度量,记作:  

                                 S(n)=O( f(n) )            

其中 n 为问题的规模。

    一个算法所需存储空间:算法本身的存储空间、输入数据的存储空间、算法在运行过程中临时占用的存储空间。 如果额外空间相对于输入数据量来说是个常数,则称此算法是原地工作。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值