数据结构学习笔记(2)—— 算法

本文主要参考书籍为《大话数据结构》第二章,算法

目录

一、算法的定义与特性

二、算法设计要求

三、算法效率的度量方法

四、算法的时间复杂度

五、算法的空间复杂度


一、算法的定义与特性

特性:输入输出、有穷性、确定性、可行性。

1、输入输出:可能没有输入(如print "Hello World!");但是一定有一个或多个输出。

2、有穷性:算法不会出现无限循环。可以在有限的时间内运行结束。

3、确定性:每一步有确定含义,不会有二义性。相同输入有唯一输出。

4、可行性:每一步必须可行,每一步必须通过执行有限次数完成。

 

二、算法设计要求

1、正确性

 

数据结构学习笔记(2)—— 算法_第1张图片

2、可读性

3、健壮性:输入不合法时,算法也可以作出相关处理,而不是产生异常。

4、时间效率高、存储量低

 

三、算法效率的度量方法

1、事后统计方法

存在几个弊病:

必须利用设计好的测试程序和数据;

运算时间的比较非常依赖于环境,比如不同机器对同一程序运算速率不同;

效率高的算法在小数据集面前往往得不到体现。

2、事前分析估算方法

(1)高级语言程序在计算机上的运行速度往往取决于:

数据结构学习笔记(2)—— 算法_第2张图片

其中2,4分别取决于计算机软硬件的支持。抛开软硬件的关系不谈,程序的运行速度主要取决于算法的好坏与输入的规模。

(2)函数的渐进增长

数据结构学习笔记(2)—— 算法_第3张图片

比如算法A,输入为n时需要2n+3步运算;而算法B输入为n时需要3n+1步运算。当n>2时,算法A的运算步骤总比算法B少。所以算法B的增长渐进快于算法A。

(3)判断一个算法的效率时,函数中的常数和其他次要项往往可以忽略。应该关注住最高阶项的阶数。

事前估算的方法,主要就是依赖于判断几个算法关键执行次数的渐进增长性。通过算方法的时间复杂度进行预估。

 

四、算法的时间复杂度

1、定义

数据结构学习笔记(2)—— 算法_第4张图片

其中O()称为大O记法。

2、推导大O阶的方法

数据结构学习笔记(2)—— 算法_第5张图片

O(1):  常数阶

O(n):线性阶

O(n^2): 平方阶

O(log(n)): 对数阶,例子:

数据结构学习笔记(2)—— 算法_第6张图片

 

五、算法的空间复杂度

你可能感兴趣的:(数据结构,算法)