数据结构-关于算法的讨论

一,什么是算法 ?算法的主要特征

概念算法即对特定问题求解步骤的描述,它是指令的有限序列,每一条指令代表一个或多个操作。

特征

有穷性:即算法可以经过有限个步骤,状态,指令后结束,不能无限执行下去。

确定性:在确定语境下具有唯一一条执行路径,因此相同的输入只能得到相同的输出。

可行性:任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成

输入性:除算法自己具有初始化条件外,必须给予输入项以刻画运算对象的初始情况

输出性:有一个或多个项输出,反映执行后的结果。

二,评价算法的几个依据

正确性:满足问题的需求,正确求解问题。

健壮性:遇到不正确输入能够处理,遇到异常情况能够正常终止

效率,存储空间:算法执行的时间(相对于同样的机器环境下),算法占用的空间

三,时间复杂度,空间复杂度

这两个概念分别是相对于标题二中“效率”,和“存储空间”来说的

关于算法的执行时间

通常认为:

1, 同一个算法,用不同的编程语言来实现,显然执行的绝对时间是不同的。实现的语言级别越高,执行效率就越低。

2, 以上条件相同,算法在性能不同的计算机上执行,消耗的绝对时间不同,除了硬件的性能(CPU,内存条)外,软件(如编译器,操作系统)也产生影响

3, 以上条件相同,算法在不同输入的情况下执行的绝对时间不同,如冒泡排序中,基本操作是比较相邻两个数的大小并交换,因此输入数据可能存在不需要执行交换的情况,减少了操作的执行时间。

因此以算法执行的绝对时间单位来衡量算法是不合适的。

关于算法的工作量

0, 可以理解为算法要执行的基本操作(固有数据操作)的重复执行次数,

1, 它应当是一个只受到问题的规模(记为整数量n)影响的函数(这很好理解,它不应当受到实现语言,计算机硬件,软件环境的影响)。

关于时间复杂度

算法工作量力求达到的结果是,以该工作量衡量的算法能够表现出:

在实现语言不同的情况下,语言级别越高效率越低,执行的绝对时间越低(为什么高级语言效率就低?)

在计算机性能不同的情况下,性能更好计算机的执行速度越快

因此,使得算法的工作量可以直接用来衡量效率。

定义问题规模n,则时间复杂度T(n),定义算法的工作量 f(n)应当如下:

T(n)=O(f(n))。

不同数量级时间复杂度

计算下列程序段的时间复杂度

              程序段:

(1){++x;s=0}:O(1)

(2)将上述语句放到一层循环中:若循环n次,则O(n)

(3)将上述语句放入到多层循环中:若每层循环的次数分别为n,m等等

,则时间复杂度为O(n*m*····)

O(1),O(n),O(n平方)称为算法的数量级,常量阶,线性阶,平方阶。

此外还有指数阶O(n的k次方),对数阶(log n)等等,

绘制算法问题的规模n和时间复杂度的增长图

显然,在问题规模增长不断增长时,不同数量级的算法时间复杂度的增长率不同,(指数阶的算法在问题规模很小的时候就可以将时间复杂度突破天际!)


猜你喜欢

转载自blog.csdn.net/codeeror/article/details/80711671
今日推荐