编程语言
首页 > 编程语言> > 数据结构-算法

数据结构-算法

作者:互联网

算法

定义

对特定问题求解方法和步骤的一种描述,它是指令的有限序列。

每个指令表示一个或多个操作。

描述

算法与程序

程序 = 数据结构 + 算法

算法特性

设计算法的要求

算法分析

算法时间效率的度量

根据该算法编制的程序在计算机上执行的耗时来度量。

两种度量方法

事后统计

将算法实现为程序,在计算机上运行,观测其耗时和占用存储空间大小。(实验环境的影响较大,结果与计算机软硬件有关,误差较大)

事前分析

对算法所耗资源的估算。

算法运行时间 = 一个简单操作所需的时间 x 简单操作次数

​ = Σ每条语句的执行次数 x 该语句执行一次所需的时间

​ = Σ每条语句频度 x 该语句执行一次所需的时间(假定为单位时间)

​ = Σ每条语句频度

例子

image-20200609195008278

算法时间复杂度的渐进表示法

若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n) = O(f(n)),称O(f(n))为算法的渐进时间复杂度(O是数量级的符号),简称时间复杂度

image-20200609200219302
只考虑算法中基本操作执行的次数。

image-20200609200552907
基本语句指算法中执行次数最多的那个语句。(次数随输入数据集变化)

问题规模n

最坏时间复杂度:最坏情况下,算法的时间复杂度。

平均时间复杂度:在所有可能输入实例在等概率出现的情况下,算法的期望运行时间。

最好时间复杂度:最好情况下,算法的时间复杂度。

考虑优先级:最坏时间复杂度 > 平均时间复杂度 > 最好时间复杂度

注:对于复杂的算法,需要将其拆分,然后利用加法、乘法法则计算其数量级。

各数量级时间复杂度排序(从小到大):

常数阶 对数阶 线性阶 线性对数阶 平方阶 立方阶 ... K次方阶 指数阶
O(1) O(log2^n) O(n) O(nlog2^n) O(n^2) O(n^3) O(n^k) O(2^n)

空间复杂度度量

渐进空间复杂度

算法所需存储空间的度量

S(n) = O(f(n))

注:n为问题的规模

标签:语句,复杂度,算法,时间,数量级,数据结构,输入
来源: https://www.cnblogs.com/lisztomania/p/13086472.html