算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中一条指令表示一个或多个操作。
算法执行的时间需要依据该算法编制的程序在计算机上运行时所消耗的时间来度量。
度量一个程序的方法有两种。
(1)事后统计法
(2)事前分析估算法 取决于以下因素:
- 依据的算法选用何种策略;
- 问题的规模;
- 书写程序的语言,对于同一个算法,实现语言的级别越高,执行效率就越低;
- 代码的质量;
- 机器执行指令的速度。
由此,同一个算法用不同的语言实现,或者用不同的编译程序进行编译,或者在不同计算机上运行时,效率均不同。所以用绝对的时间单位衡量算法的效率是不合适的。可以认为一个特定算法“运行工作量”的大小,只依赖于问题的规模(通常用整数量n表示),可以认为它是问题规模的函数。
一个算法是由控制结构(顺序,分支和循环3种)和原操作(指固定类型的操作)构成的,则算法时间取决于两者的综合效果。对于同一问题的不同算法,通常从算法中选取一种对于研究的问题来说是基本的原操作,以该基本操作重复执行的次数作为算法的时间量度。
一般情况下,算法中基本操作重复执行的次数是问题规模n的某个f(n),记作
T(n)=O(f(n))
计算机运行一个算法时,程序代码被执行的总次数称为时间复杂度
时间复杂度关心的是数量级,所以对f(n)进行简化:
- 略去常数;
- 只保留最高阶的项;
- 变最高阶项的系数为1