第1章 算法简介

第1章 算法简介


算法

算法广义上定义为解决问题的流程和步骤,狭义上定义为完成任务的有穷指令序列,计算机专业中专指后者。
具有下列五个特性:

  • 确定性:每一条指令在计算机执行时是明确的,无异议;

  • 可行性:每一条指令能被计算机执行;

  • 输入:有0,1,2或多个输入;

  • 输出:至少有1个输出;

  • 有穷性:每一条指令执行的次数是有穷的。

计算机相关概念

计算过程不满足有穷性,可以永远执行下去。例如:死循环(所有正整数求和),操作系统

编程是算法的实现过程。
算法基于数据结构实现,程序是算法的实现结果,在面向过程中,程序=算法+数据结构。
进程是程序的运行状态,程序是静态的,进程是动态的。

软件包括程序,数据和文档。
硬件指物理设备。

算法性能

算法性能体现在运行效率(时间)和存储效率(空间)。随着存储硬件价格的降低,人们更加关注算法的运行效率
使用计算量函数细致地衡量算法的性能,使用渐进复杂度粗略地衡量算法的性能。
更关注算法的平均运行情况最坏运行情况

计算量函数

问题规模表示算法基本运算量函数。时间复杂度用T(n)(或T(n,m)等)来表示。

T ( n ) = 5 n T ( n ) = 7 log n T ( n ) = 3 n log n T ( n ) = 4 n 3 T ( n ) = 2 n T ( n , m ) = 2 ( n + m ) \begin{array}{l} {T(n)=5 n} \\ {T(n)=7 \log n} \\ {T(n)=3 n \log n} \\ {T(n)=4 n^{3}} \\ {T(n)=2^{n}} \\ {T(n, m)=2(n+m)} \end{array}
时间复杂度比较

最坏时间复杂度

渐近时间复杂性,表示算法时间复杂度的上界,用 O ( f ( n ) ) \mathrm{O}(\mathrm{f}(\mathrm{n})) 符号表示。

  c > 0 , n 0 N + 使得 n n 0 总有 T ( n ) c f ( n ) T ( n ) = O ( f ( n ) ) \begin{array}{l} \\ \exist \ c>0, n_{0} \in N^+ \\ \text{使得}n \geq n_{0}时,\text{总有}T(n) \leq c * f(n) \\ \therefore {\mathrm{T}(\mathrm{n})=\mathrm{O}(\mathrm{f}(\mathrm{n}))} \end{array}

最好时间复杂度

渐近时间复杂性,表示算法时间复杂度的下界,用 Ω ( f ( n ) ) \Omega(\mathrm{f}(\mathrm{n})) 符号表示。

  c > 0 , n 0 N + 使得 n n 0 总有 T ( n ) c f ( n ) T ( n ) = Ω ( f ( n ) ) \begin{array}{l} \\ \exist \ c>0, n_{0} \in N^+ \\ \text{使得}n \geq n_{0}时,\text{总有}T(n) \geq c * f(n) \\ \therefore {\mathrm{T}(\mathrm{n})=\Omega(\mathrm{f}(\mathrm{n}))} \end{array}

平均时间复杂度

渐近时间复杂性,表示算法时间复杂度的上界和下界,用 Θ ( f ( n ) ) {\Theta}(\mathrm{f}(\mathrm{n})) 符号表示。

  c 1 > 0 ,   c 2 > 0 , n 0 N + 使得 n n 0 总有 T ( n ) c 1 f ( n ) T ( n ) c 2 f ( n ) T ( n ) = Θ ( f ( n ) ) \begin{array}{l} \\ \exist \ c_{1}>0,\ c_{2}>0, n_{0} \in N^+ \\ \text{使得}n \geq n_{0}时,\text{总有}T(n) \leq c_{1} * f(n),T(n) \geq c_{2} * f(n) \\ {\mathrm{T}(\mathrm{n})=\mathrm{\Theta}(\mathrm{f}(\mathrm{n}))} \end{array}

时间复杂度记号图例

发布了57 篇原创文章 · 获赞 44 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/the_harder_to_love/article/details/91345873
今日推荐