文章目录

  • 概念
  • 几种典型循环结构的效率
  • 线性循环
  • 对数循环
  • 线性对数循环
  • 多项式循环
  • 依赖多项式循环
  • 求效率函数的一般方法
  • Big-O 表达式


概念

算法的复杂度分析包括空间复杂度分析和时间复杂度分析。








算法复杂度

空间复杂度

时间复杂度

算法过程中所需的内存空间

算法运行所需的时间

不同的机器性能

运行的语句数量


对于现代计算机,内存已经比较足够,对算法效率影响最大的是时间复杂度。
在时间复杂度的分析中,抛开具体机器,我们主要研究的是运行的语句数量。
运行的语句数量取决于需要处理的元素个数和算法的循环结构。

引入函数机器学习模型 时间效率 python 分析算法时间效率_循环结构来表示一个算法的效率,其中机器学习模型 时间效率 python 分析算法时间效率_时间复杂度_02表示要处理的数据量。

几种典型循环结构的效率

效率分析我们主要关注循环结构,现就几种典型的循环结构探讨它的算法效率公式:

  1. 线性循环(linear loops)
  2. 对数循环(logarithmic loops)
  3. 嵌套循环(nested loops)
  • 线性对数循环(linear logarithmic)
  • 多项式循环(quadradic)
  • 依赖多项式循环(dependent quadratic)
线性循环
i=0;
while(i<n){
	//应用代码;
	i=i+1;
}

在这个结构中,应用代码会执行n次。
运行的语句数量与处理的数据量成正比。
这一部分的效率函数可以表示为:机器学习模型 时间效率 python 分析算法时间效率_循环结构_03

同理:

i=0;
while(i<n){	
	//应用代码;	
	i=i+2;
}

这一部分的效率函数可以表示为:机器学习模型 时间效率 python 分析算法时间效率_循环结构_04

对数循环
i=0;
while(i<n){	
	//应用代码;
	i=i*2;
}

在这个结构中,应用代码会执行机器学习模型 时间效率 python 分析算法时间效率_循环结构_05次。
这一部分的效率函数可以表示为:机器学习模型 时间效率 python 分析算法时间效率_循环结构_06

同理:

i=n;
while(i>=1){
	//应用代码;	
	i=i/2;
}

这一部分的效率函数可以表示为:机器学习模型 时间效率 python 分析算法时间效率_循环结构_06

线性对数循环
i=1;
while(i<n){
	j=1;
	while(j<n){
		//应用代码;
		j=j*2;
	}
	i=i+1;
}

内层循环为对数循环,应用代码执行次数为机器学习模型 时间效率 python 分析算法时间效率_循环结构_05
外层循环为线性循环,内层代码执行次数为机器学习模型 时间效率 python 分析算法时间效率_时间复杂度_02,因此对数循环总共执行机器学习模型 时间效率 python 分析算法时间效率_时间复杂度_02次。
应用代码执行总次数为 机器学习模型 时间效率 python 分析算法时间效率_机器学习模型 时间效率 python_11
这一部分的效率函数可以表示为:机器学习模型 时间效率 python 分析算法时间效率_时间复杂度_12

多项式循环
i=1;
while(i<n){
	j=1;
	while(j<n){
		//应用代码;
		j=j+1;
	}
	i=i+1;
}

对于内层循环,应用代码执行机器学习模型 时间效率 python 分析算法时间效率_时间复杂度_02次;对于外层循环,内部结构执行机器学习模型 时间效率 python 分析算法时间效率_时间复杂度_02次。
应用代码总共执行机器学习模型 时间效率 python 分析算法时间效率_时间复杂度_15次。
因此,这一部分的效率函数可以表示为:机器学习模型 时间效率 python 分析算法时间效率_循环结构_16

依赖多项式循环
i=1;
while(i<n){
	j=1;
	while(j<i){
		//应用代码;
		j=j+1;
	}
	i=i+1;
}

对于内层循环,应用代码的执行次数取决于外层循环,平均执行次数为机器学习模型 时间效率 python 分析算法时间效率_多项式_17
外层循环的执行次数为机器学习模型 时间效率 python 分析算法时间效率_时间复杂度_02
应用代码总共执行机器学习模型 时间效率 python 分析算法时间效率_时间复杂度_19次。
因此,它的效率函数可以表示为:机器学习模型 时间效率 python 分析算法时间效率_机器学习模型 时间效率 python_20

求效率函数的一般方法

i=1;
while(i<n){
	j=1;
	while(j<i){
		//应用代码;
		j=j+1;
	}
	i=i+1;
}
k=n;
while(k>=1){
	//应用代码; 
	k=k/2;
}

对于嵌套的循环结构,执行次数为外层循环次数乘以内层循环次数;对于并列的循环结构,执行次数为将两个循环的次数相加。上述代码的算法效率公式为机器学习模型 时间效率 python 分析算法时间效率_时间复杂度_21

Big-O 表达式

表示某一算法的效率处在哪一个档次

计算方法:

  1. 保留算法效率公式机器学习模型 时间效率 python 分析算法时间效率_时间复杂度_22的最高次项(算法复杂程度最高的项),摄取其余项。
  2. 将其系数设为1。
  3. 项的复杂程度由低到高分别为: 机器学习模型 时间效率 python 分析算法时间效率_多项式_23, 机器学习模型 时间效率 python 分析算法时间效率_时间复杂度_24, 机器学习模型 时间效率 python 分析算法时间效率_循环结构_25, 机器学习模型 时间效率 python 分析算法时间效率_时间复杂度_26, 机器学习模型 时间效率 python 分析算法时间效率_时间复杂度_27, …, 机器学习模型 时间效率 python 分析算法时间效率_时间复杂度_28, 机器学习模型 时间效率 python 分析算法时间效率_时间复杂度_29, 机器学习模型 时间效率 python 分析算法时间效率_机器学习模型 时间效率 python_30

例如:
机器学习模型 时间效率 python 分析算法时间效率_多项式_31

  1. 最高次项为:机器学习模型 时间效率 python 分析算法时间效率_循环结构_32
  2. 系数设为1:机器学习模型 时间效率 python 分析算法时间效率_时间复杂度_27

因此,这个算法的Big-O表达式为:机器学习模型 时间效率 python 分析算法时间效率_循环结构_34