第1章 算法简介
算法
算法广义上定义为解决问题的流程和步骤,狭义上定义为完成任务的有穷指令序列,计算机专业中专指后者。
具有下列五个特性:
计算机相关概念
计算过程不满足有穷性,可以永远执行下去。例如:死循环(所有正整数求和),操作系统。
编程是算法的实现过程。
算法基于数据结构实现,程序是算法的实现结果,在面向过程中,程序=算法+数据结构。
进程是程序的运行状态,程序是静态的,进程是动态的。
软件包括程序,数据和文档。
硬件指物理设备。
算法性能
算法性能体现在运行效率(时间)和存储效率(空间)。随着存储硬件价格的降低,人们更加关注算法的运行效率。
使用计算量函数细致地衡量算法的性能,使用渐进复杂度粗略地衡量算法的性能。
更关注算法的平均运行情况和最坏运行情况。
计算量函数
用问题规模表示算法基本运算量的函数。时间复杂度用T(n)(或T(n,m)等)来表示。
T(n)=5nT(n)=7lognT(n)=3nlognT(n)=4n3T(n)=2nT(n,m)=2(n+m)
最坏时间复杂度
渐近时间复杂性,表示算法时间复杂度的上界,用
O(f(n))符号表示。
∃ c>0,n0∈N+使得n≥n0时,总有T(n)≤c∗f(n)∴T(n)=O(f(n))
最好时间复杂度
渐近时间复杂性,表示算法时间复杂度的下界,用
Ω(f(n))符号表示。
∃ c>0,n0∈N+使得n≥n0时,总有T(n)≥c∗f(n)∴T(n)=Ω(f(n))
平均时间复杂度
渐近时间复杂性,表示算法时间复杂度的上界和下界,用
Θ(f(n))符号表示。
∃ c1>0, c2>0,n0∈N+使得n≥n0时,总有T(n)≤c1∗f(n),T(n)≥c2∗f(n)T(n)=Θ(f(n))