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

算法复杂度分析与计算

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

收录于:18天前

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

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

#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) 取最大阶项。

. . .

相关推荐

额外说明

SpringBoot数据库换源

文章目录 前言 一. baomidou提供换源注解 @DS 二. 手动数据源切换 三. AOP自动换源 前言 笔者知道有三种方式: baomidou提供的@DS 自定义AOP自动换源 实现AbstractRoutingDataSource手动换源 一.

额外说明

ES6Set函数和Map函数

  1. Set() 说明 :ES6提供了新的数据结构,它类似于数组,但是成员的都是唯一的,没有重复的值。Set本身是一个构造函数,用来生成Set数据结构。 1.1add()方法 说明:通过add向Set结构加入成员,结果表示Set结构不会添加重复的值

额外说明

量化交易 实战第七课 单因子 IC 分析

量化交易 实战第七课 单因子 IC 分析 概述 代码实现 导包 1. 准备因子数据 2. 准备价格数据 3. 生成通用 Alphalens 结构 4. 计算因子 因子 IC 结果分析 时间序列图和移动平均线图 因子直方图 因子 Q-Q 图 因子有效性分析

额外说明

14.tornado操作之应用Websocket协议实现聊天室功能

聊天室功能的实现 1.什么是 WebSocket (1)定义 (2)优点 (3)和 HTTP 对比 (4)适用场景 2.WebSocket 关键方法 3.本tornado项目中使用WebSocket (1)准备一个聊天室的页面: 第一步:编写视图: 第二

额外说明

云计算环境中高性能计算的挑战与对策

文章目录 云计算中的高性能计算挑战 1. 资源竞争: 2. 网络延迟: 3. 数据传输效率: 4. 虚拟化开销: 5. 节点异构性: 高性能计算在云计算环境中的对策 1. 定制化虚拟机镜像: 2. 弹性资源调整: 3. 高效数据传输: 4. 任务并行度:

额外说明

为什么路由器属于网络层

1. 路由器所属阶段 路由器属于 OSI 模型的网络层,因为它们负责根据网络层信息(第 3 层)做出路由决策。网络层是 OSI 模型中的第三层,主要负责将数据包从网络中的源路由到目的地。 Here’s a formal and precise expla

额外说明

1.spark standalone环境安装

概述 环境是spark 3.2.4 hadoop版本 3.2.4,所以官网下载的包为 spark-3.2.4-bin-hadoop3.2.tgz 在具体安装部署之前,需要先下载Spark的安装包,进到 spark的官网,点击download按钮 使用Sp

额外说明

【Python 随练】企业奖金计算器

题目: 企业发放的奖金根据利润提成。利润 : 低于或等于 10 万元时,奖金可提 10%; 高于 10 万元,低于 20 万元时,低于 10 万元的部分按 10%提成,高于 10万元的部分,可提成7.5%; 20 万到 40 万之间时,高于 20 万元的

额外说明

【Python】Python 常见名词:字面常量、序列、可迭代对象、集合

目录 一、字面常量(Literal) 二、序列(sequence) 三、可迭代对象 四、集合 一、字面常量(Literal

额外说明

解决系统找不到schannel.dll文件出现错误提示的问题

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

ads via 小工具