数据结构与算法篇--时间复杂度推导思路

重点提示:

  • 时间复杂度是输入规模的函数
  • 时间复杂度等于基本操作计数

思路1:渐近复杂度

        计算速度          输入规模            丢掉低阶项和常系数
计算成本--------->运行时间--------->时间复杂度------------------>渐近时间复杂度

关注点变化:绝对运行时间->运行时间的变化趋势->运行时间在大规模输入下的变化趋势
好处:丢掉低阶项和常系数就是去除硬件、编译器、操作系统等次要因素的影响。

思路2:认识时间复杂度

认识时间复杂度

## 认识时间复杂度

目标:理解时间复杂度是输入规模的一个函数。
------------------------------------------------------------------
出发点:输入规模越大,算法的运行时间越长。

>>> 这意味着:算法的运行时间和输入规模有关。
------------------------------------------------------------------
但当输入规模固定为n时,输入内容不同,算法的运行时间也不同。

>>> 这意味着:同一个n,有多个不同的运行时间。这不符合函数的定义。(为什么)
-----------------------------------------------------------------
解决办法:当输入规模固定为n时,取运行时间最长者。对任意输入规模n,都能唯一确定一个运行时间值。

>>> 这意味着:算法的最坏情况运行时间是输入规模的函数,且符合函数的定义。

-------------------------------------------------------------------

结论:时间复杂度是输入规模的函数。

思路3:计算时间复杂度

复杂度计算示例汇总

## 计算时间复杂度

目标:理解时间复杂度等于基本操作计数,体会渐近分析在其中的作用。
----------------------------------------------------------
出发点:算法的时间复杂度等于所有语句的运行时间之和。
----------------------------------------------------------
观察1:每条语句都可分解为若干条基本操作。

事实1:常见的基本操作有算术运算、比较、分支、子函数调用和返回等。

事实2:每类基本操作的运行时间为常数。
----------------------------------------------------------
推论1:每条语句的运行时间=基本操作次数*对应的常数运行时间。

结论:从渐近意义上讲,算法的渐近时间复杂度等于基本操作计数。

思路比结论重要。

你可能感兴趣的:(数据结构与编程技术,算法,数据结构)