算法效率的度量
程序=数据结构+算法
数据结构:将现实世界的问题信息化,将信息存进计算机。同时实现对数据结构的基本操作。(要处理的信息)
算法:利用数据结构的信息和数据结构的基本操作,解决实际问题。(处理信息的步骤)
数据结构的三要素:逻辑结构,存储结构,数据的运算。
算法效率的度量
算法效率的度量是通过时间复杂度和空间复杂度来描述的。
1.时间复杂度
一个语句的频度是指该语句在算法中北重复执行的次数。算法中所有语句的频度之和记为T(n),它是算法问题规模n的函数。时间复杂度主要分析T(n)的数量级,故可以使用O(f(n))表示时间复杂度。(主要用于问题规模足够大)
计算
-
找到一个基本操作
-
分析执行次数x与问题规模n的关系x=f(n)
-
x的数量级O(x)就是算法时间复杂度T(n)
常见的渐进时间复杂度为:
O(1) < O(log2n) < O(n) < O(nlog2n) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
(常对幂指阶)
2.空间复杂度
一个程序在执行时除需要存储空间来存放本身所用的指令、常数、变量和输入数据外,还需要对一些数据进行操作的工作单元和存储一些为实现计算所需信息的辅助空间。
S(n)=O(g(n))
算法原地工作是指算法所需的辅助空间为常量,即O(1).
三种复杂度
-
最坏时间复杂度:考虑输入数据 “最坏” 的情况
-
平均时间复杂度:考虑所有输入数据都等概率出现的情况
-
最好时间复杂度:考虑输入数据 “最好” 的情况
Don't aim for success if you really want it.Just stick to what you love and believe in.And it will come naturally.