小工具      在线工具  汉语词典  css  js  c++  java

算法复杂度分析与计算

程序、数据结构与算法,算法,数据结构,图论 额外说明

收录于:157天前

数据结构是数据存储的方式并显示数据之间的关系。算法的必要条件是输入和输出数据,因此数据结构也是算法的必要条件。

健全的算法必须是有限的、确定性的和可执行的。算法也有好坏之分。例如,著名数学家高斯发现了算术级数的对称性,这使得他能够从算术数列的角度来计算和。

#include<stdio.h>
int main(){
    
	int ans =0,i;
	for (i=0;i<=100;i++){
    
		ans +=i;
	}
	printf("%d",ans);
	return 0;	
} 
#include<stdio.h>
int main(){
    	
	int a =(1+100)*(100/2);
	printf("%d",a);
	
} 

当计算从 1 到 100 的数字时,两种方法都会得到 5050,但显然第二种方法更简单。因此,算法也有优点和缺点。评价一个算法优劣的标准称为算法的复杂度,分为时间复杂度和空间复杂度。

程序执行时间表示一个程序运行所需要的时间,一个算法的执行时间大致上等千其所有语句执行时间的总和。

算法的执行时间受计算机、编译时间、硬件环境等影响,但这些因素与算法无关。因此,如果将每条语句的执行时间视为单位时间,那么所有语句执行的单位时间就是时间复杂度。

时间复杂度定义为算法执行时间的增长率O(n)

句子频率定义为一条语句的重复执行次数f(n)
由于时间为单位时间,那么对于任何执行次数(语句频度)均有
f(n) = 1 * n f(n) = 1*nFn=1*n

n代表执行次数。

如果一段算法3000行,那么f(n) = 1 * 3000 f(n) = 1*3000Fn=1*3000
故执行时间的增长率为1,每次增加一个单位时间,所以时间复杂度也就最低。

规定时间复杂度用O(fn)表示,并规定常数的时间复杂度为O(1)T(n) = O(1)

时间复杂度的计算公式为T(n) = O(f(n)).

以下常见的时间复杂度计算是:

int i;
for (i=0;i<n;i++){
    
	s = s+i;    //执行n次
	i++;
}

语句频度:
f (n) = n + 1 f(n) = n + 1Fn=n+1
时间复杂度:
O(n) = n O(n) = nn=n

for(i=0;i<=n;i++){
    
	for(j=0;j<=n;j++){
    
		y++;
	}
}

上面算法中外层的语句频度为fn=n,内层的语句频度的时间复杂度为fn=n,因此整个程序的时间语句频度为n^2即fn=n^2故T(n) = O(n^2)。

for (i=0;i<=n;i=i*2){
    
	ans +=i;
}

上面程序只有一个循环,但是次循环的增量为i*2,在[0,100]的范围内,令语句频度为f(n)
2 f ( n ) <= n 2^{f(n)} <= n2Fn<=n

f (n) <= log_2 n f(n) <= log_2 nFn<=G2n

所以时间复杂度为 log ⁡ 2 n \log_2 nloG2n

算法的存储空间需求,采用渐近空间复杂度(Space
Complexity)作为算法所需存储空间的度量,称为空间复杂度

除了自己的输入和输出之外,程序还需要存储产生的数据。前者取决于问题本身,与算法无关。后者占用的存储空间大小表示算法所需的存储容量大小。

for(i=O;i<n/2;i++) {
     
	t=a[i]; 
	a[i]=a[n-i-1]; 
	a[n-i一l]=t;
}
for (i=O; i<n; i++) {
    
	b[i]=a[n-i-1]; 
}
for(i=O;i<n;i++) {
    
	a [i] =b [i];
}

两个程序执行相同的功能,但前者只需要欺骗变量t,后者需要一个数组。空间复杂度的计算方法与时间复杂度的计算方法相同。

S ( n ) = O ( f ( n ) ) S(n) = O(f(n))Sn=Fn))

对于第一个算法 f(n) = 1,S(n) = O(1)。第二个兄弟算法f(n) = n,S(n) = O(n)。

设单位空间为1,算法空间占用大小f(n)。如果 f(n) 不是常数,则 O(n) 取最大阶项。

. . .

相关推荐

额外说明

百度日常实习经历(Java后端)

  岗位:百度ACG物联网部门后端开发Java日常实习   面试轮次:技术面一面 一、项目相关(Java Netty) NIO模型和BIO模型   BIO(blocking I/O),同步阻塞式I/O,即客户端与服务器建立一个连接时,服务器就会启动一个线

额外说明

微信小程序——拖拽定位

QQ 1274510382 Wechat JNZ_aming 商业联盟 QQ群538250800 技术搞事 QQ群599020441 解决方案 QQ群152889761 加入我们 QQ群649347320 共享学习 QQ群674240731 纪年科技am

额外说明

day33_spring_mvc_3

SpringMVC的文件上传 1-SpringMVC的请求-文件上传-客户端表单实现(应用) 文件上传客户端表单需要满足: 表单项type=“file” 表单的提交方式是post 表单的enctype属性是多部分表单形式,及enctype=“multip

额外说明

设计模式——简单工厂模式

设计模式——简单工厂模式 /// <summary> /// 电脑 /// </summary> public abstract class Computer { /// <summary>

额外说明

循环神经网络RNN完全解析:从基础理论到PyTorch实战

目录 一、循环神经网络全解 1.1 什么是循环神经网络 网络结构 工作原理 数学模型 RNN的优缺点 总结 1.2 循环神经网络的工作原理 RNN的时间展开 数学表述 信息流动 实现示例 梯度问题:梯度消失和爆炸 总结 1.3 循环神经网络的应用场景 文

额外说明

[C语言]浮点型在内存中的存储

        在上一篇文章,我们讲述了整型在内存中的存储,这篇文章我们就一起来看一下“浮点型在内存中的存储”         回顾:整型在内存中的存储[C语言]和我一起来认识“整型在内存中的存储”_HY_PIGIE的博客-CSDN博客 目录      

额外说明

关于ES6+React+webpack的环境搭建

关于ES6+React+webpack的环境搭建 1.全局安装webpack npm install webpack -g 2.安装webpack-dev-server(可选安装) npm install webpack-dev-server -g这个是

额外说明

解决系统缺少找不到WindowsCodecsRaw.dll文件的问题

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个WindowsCodecsR

额外说明

系统由于找不到d3dx9_30.dll文件导致游戏软件无法启动问题

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个d3dx9_30.dll文件

额外说明

swift3.0 的解释在 Swift 中解包可选值 && 可选时意外发现 nil

​ 首先说一下Swift中的一些Optional,翻译过来就是可选的。它是一个枚举类型,有以下两个值。 ​   1. none:表示没有值  2. some:某一类值 原始可选项的定义: let x: Optional = 10 1 1 简单的定义: /

ads via 小工具