时间复杂度

最近学习算法,于是重拾数据结构的一些基本知识,先从最基本的时间复杂度和空间复杂度说起

时间复杂度

1 时间频度T(n)

即一个算法中的基本语句重复执行次数。由于计算机环境、内存环境等各种因素,导致一个程序即使重复值执行,其执行时间也是不同的。而且我们也没有必要去详细求出算法执行时间,我们要做的是比较不同算法的执行时间 ,找出效率最高的那个。而一个算法执行花费的时间和其基础语句执行次数成正比

 时间复杂度O(f(n))

在刚才提到的时间频度中,n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化。但有时我们想知道它变化时呈现什么规律。时间复杂度由此引入。倘若存在f(n)使T(n)/f(n)在n趋于无穷大时为非零常数,则称f(n)为T(n)的同数量级函数,记作T(n) = O(f(n)),称 O(f(n))为算法的时间复杂度

T(n) = O(f(n))表示当n趋于无穷大时,C*f(n)为T(n)的上限,也就是说,可以用f(n)的变化规律近似于T(n)这点通过更简单的f(n)来观察T(n)的变化规律

 求时间复杂度基本步骤

(1) 找出算法中的基础语句;

算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。

(2) 找出基本语句执行次数的数量级;

只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数。这样能够简化算法分析,并且使注意力集中在最重要的一点上:增长率。

(3) 用大O表示算法性能;

将基本语句执行次数的数量级放入大Ο记号中。

 计算时间复杂度的简单法则

  1. 顺序结构使用求和法则,即若算法的2个部分时间复杂度分别为 T1(n)=O(f(n))和 T2(n)=O(g(n)),则 T1(n)+T2(n)=O(max(f(n), g(n)))
  2. 循环结构使用乘法法则,即若算法的2个部分时间复杂度分别为 T1(n)=O(f(n))和 T2(n)=O(g(n)),则 T1*T2=O(f(n)*g(n))
posted @ 2019-04-05 18:09  北冥虾  阅读(158)  评论(0编辑  收藏  举报