时间?空间?复杂度??

1.什么是时间复杂度和空间复杂度?

1.1算法效率

算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称为空间复杂度。
时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的水准,所以我们如今不需要再特别关注算法的空间复杂度。

1.2时间复杂度的概念

时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。但是我们需要每个算法度上机测试吗?是可以都上机测试,但是这很麻烦,所以才有了时间复杂度这个分析方式。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度

1.3空间复杂度的概念

空间复杂度是对一个算法运行过程中临时占用存储空间大小的量度。空间复杂度不是程序占用了多少比特位的空间,因为这个也没有太大的意义,所以空间复杂度算的是变量的个数。空间复杂度计算也采用大O渐进表示法

2.什么是大O 渐进表示法?

实际中我们计算时间复杂度时,我们其实并不一定要精确的执行次数,而只需要大概执行次数,那么这里我们使用大O渐进表示法
大O符号(Big O notation):是用来描述函数渐进行为的数学符号。
推导大O阶方法:
1.用常数1取代运行时间中所有加法常数。
2.在修改后的运行次数函数中,只保留最高阶项。
3.如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶。

3.如何计算常见算法的时间复杂度和空间复杂度?

3.1普通常见的时间复杂度计算

3.1.1Func1
void Func1 (int N)
{int count=0;for(int j=0;i<N,++i){for(int j=0;j<N;++j){count++;}}for(int k=0;k<2*N;++k){++count;}int M=10;while(M--){++count;}printf("%d ",count);
}

在这里插入图片描述

3.1.2Func2
void Func2 (int N)
{int count=0;for(int k=0;k<2*N;++k){++count;}int M=10;while(M--){++count;}printf("%d ",count);
}

在这里插入图片描述

3.1.3Func3
void Func3 (int N,int M)
{int count=0;for(int k=0;k<N;++k){++count;}for(int k=0;k<M;++k){++count;}printf("%d ",count);
}

在这里插入图片描述

3.1.4Func4
void Func4 (int N)
{int count=0;for(int k=0;k<100;++k){++count;}printf("%d ",count);
}

在这里插入图片描述

3.2存在时间复杂度最好、平均、最坏的情景

const char * strchr (const char * str,char character)
{while(*str!='\0'){if(*str==character)return str;str++;}return NULL;
}

在这里插入图片描述

3.3冒泡排序的时间复杂度计算

void Bubblesort(int *a ,int n)
{assert(a);int exchange=0;for(size_t end=n;end>0;--end){for(size_t i=1;i<end; ++i){if(a[i-1]>a[i]){int tmp=a[i-1];a[i-1]=a[i];a[i]=tmp;exchange=1;}}if (exchange==0)break;}	
}

在这里插入图片描述

3.4折半查找的时间复杂度计算

//前提数组中数据为升序
int BinarySearch(int *a,int n,int x)
{assert(a);int left=0;int right=n;while(left<right){int mid=(left+right)/2;if(a[mid]<x){left=mid;}if eles (a[mid]>x){right=mid;}else(a[mid]==x)return mid;}
}

在这里插入图片描述

3.5计算阶乘递归的时间复杂度

long long Factorial(size_t N)
{return N<2?N:Factorial(N-1)*N;
}

在这里插入图片描述

4.常见的时间复杂度:

在这里插入图片描述

结论O(1)<O(log n)<O(n)<O(n log n)<O(n^2)

5.空间复杂度的计算

5.1 空间复杂度为O(1)

时间虽然是累计的,但是空间不累计,循环走了N次,但始终重复利用的是一个空间

void Bubblesort(int *a ,int n)
{assert(a);int exchange=0;for(size_t end=n;end>0;--end){for(size_t i=1;i<end; ++i){if(a[i-1]>a[i]){int tmp=a[i-1];a[i-1]=a[i];a[i]=tmp;exchange=1;}}if (exchange==0)break;}	
}

5.2空间复杂度为O(n)

5.2.1由动态内存开辟的
void factor(int *a)
{int * a=(int)malloc((n)*sizeof(int));
}
5.2.2函数递归类型

递归调用了N层,每次调用建立了一个栈帧,每个栈帧使用了常数个空间——》O(1)
调用时,建立栈帧
返回时,销毁
最后对未知的N 空间复杂度为O(N)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/33370.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

node.js环境安装以及Vue-CLI脚手架搭建项目教程

目录 ▐ vue-cli 搭建项目的优点 ▐ 安装node.js环境 ▐ 搭建vue脚手架项目 ▐ 项目结构解读 ▐ 常用命令 ▐ 创建组件 ▐ 组件路由 ▐ vue-cli 搭建项目的优点 传统的前端项目架构由多个html文件&#xff0c;且每个html文件都是相互独立的&#xff0c;导入外部组件时需…

【STM32】中断应用概述

前面我们知道在手册中有一个中断向量表&#xff0c;初步了解了中断的概念。 1.NVIC简介 NVIC是嵌套向量中断控制器&#xff0c;控制着整个芯片中断相关的功能&#xff0c;它跟内核紧密耦合&#xff0c;是内核里面的一个外设。 在固件库中&#xff0c;NVIC的结构体定义可谓是…

【第27章】Vue实战篇之用户头像修改

文章目录 前言一、界面搭建二、头像回显三、头像上传1. 自动上传1.1 表单1.2 事件 2. 更新用户头像2.1 调用接口2.2 界面代码2.3 事件代码 总结 前言 这里来完成修改用户头像的功能。 一、界面搭建 <script setup>import { Plus, Upload } from element-plus/icons-vue…

RabbitMQ的高可用机制有了解过嘛

面试官&#xff1a;RabbitMQ的高可用机制有了解过嘛 候选人&#xff1a; 嗯&#xff0c;熟悉的~ 我们当时项目在生产环境下&#xff0c;使用的集群&#xff0c;当时搭建是镜像模式集群&#xff0c;使用了3台机器。 镜像队列结构是一主多从&#xff0c;所有操作都是主节点完成&a…

Listary——最好用的电脑搜索文件软件

简易版&#xff1a; https://www.listary.com/download-completion?versionstable 完整功能版&#xff1a; Microsoft PowerToys | Microsoft Learn

android——解决bug的流程以及细节

目录 心态 一、如何定位到有问题的bug代码 (1)搜索大法 (2)log输出大法 (3)profiler查看大法 (4)万能法找到页面 二、解决棘手bug的步骤 (1)先看再想最后动手 (2)改变现状 (3)是技术问题还是业务问题 (4)张张嘴远胜于动动手 (5)bug解决不了&#xff0c;那就解决提出…

华为仓颉编程语言震撼发布!Hello Cangjie!

引言 2024 年度华为开发者大会&#xff08;HDC&#xff09;在 6 月 21 日拉开帷幕&#xff0c;鸿蒙 NEXT&#xff08;HarmonyOS NEXT&#xff09;操作系统在万众瞩目中横空出世。 华为常务董事、终端 BG 董事长余承东激动地表示 &#xff0c;从 2019 年 8 月 9 日至今共 1778 天…

创新、引领、发展——SAMPE中国2024年会在京盛大开幕

绿树阴浓夏日长&#xff0c;在这个色彩缤纷的季节&#xff0c;SAMPE中国2024年会暨第十九届国际先进复合材料制品原材料、工装及工程应用展览会在中国国际展览中心&#xff08;北京朝阳馆&#xff09;隆重开幕。新老朋友共聚一堂&#xff0c;把酒话桑麻。 为期4天的国际学术会…

【FFmpeg】AVPacket结构体

【FFmpeg】AVPacket结构体 1.AVPacket结构体的定义 示例工程&#xff1a; 【FFmpeg】调用ffmpeg库实现264软编 【FFmpeg】调用ffmpeg库实现264软解 【FFmpeg】调用ffmpeg库进行RTMP推流和拉流 【FFmpeg】调用ffmpeg库进行SDL2解码后渲染 流程分析&#xff1a; 【FFmpeg】编码链…

Cython 是什么

Cython 是一个 Python 编译器&#xff0c;它将 Python 代码编译成 C 代码。这意味着您可以使用 Python 的语法来编写代码&#xff0c;但通过 Cython 编译后&#xff0c;它将以接近 C 语言的速度运行。 特点 静态类型&#xff1a;Cython 提供了静态类型检查&#xff0c;这意味着…

不出网上线CS的各种姿势(内网横向)

情况一&#xff1a;存在一台中转机器 存在一台中转机器&#xff0c;这台机器出网&#xff0c;这种是最常见的情况。 经常是拿下一台边缘机器&#xff0c;其有多块网卡&#xff0c;用于连接内外网&#xff0c;内网机器都不出网。这种情况下拿这个边缘机器做中转&#xff0c;就…

分享几个小红书获取笔记详情API接口调用实例

item_get_video-获得小红书笔记详情 smallredbook.item_get_video 公共参数 名称类型必须描述keyString是调用key&#xff08;API支持测试&#xff0c;获取测试key&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[i…

react 父子组件的渲染机制 优化手段

**优化后** 优化思路&#xff1a;将使用了state的组件拆分为一个子组件&#xff0c;state在子组件中使用(将state下发到子组件)&#xff0c;state变化时仅当前组件重渲染。// 优化后写法 const Component () > { return ( ) } const ButtonWithDialog () > { const […

HTML(14)——结构伪类选择器和伪元素选择器

结构伪类选择器 作用&#xff1a; 根据元素的结构关系查找元素 选择器说明E:first-child查找第一个E元素E:last-child查找最后一个E元素E:nth-child(N)查找第N个E元素(第一个元素N值为1) 例如&#xff1a;查找第一个li标签&#xff0c;将背景改为绿色 <style> li:fir…

【OpenGL基础教程】OpenGL的介绍

文章目录 前言可编程管线(核心模式)状态机总结 前言 在计算机图形学领域&#xff0c;OpenGL&#xff08;Open Graphics Library&#xff09;是一个标准&#xff0c;它定义了一套跨语言、跨平台的编程接口。它用于渲染2D、3D矢量图形。这个接口由近350个不同的函数调用组成&…

Android C++系列:C++最佳实践5const

1. 背景 在Java中我们定义常量通常用final static TYPE variableName = xxx来实现,在C语言中我们通常用预编译宏来实现:#define MAX 100,在C++中虽然我们仍可以使用预编译宏,但是已经不推荐这么干了。在Effective c++ 的条款1中:提到“尽量用编译器而不用预处理”,因为#…

周报 | 24.6.17-24.6.23文章汇总

为了更好地整理文章和发表接下来的文章&#xff0c;以后每周都汇总一份周报。 天才程序员周弈帆 | Stable Diffusion 解读&#xff08;三&#xff09;&#xff1a;原版实现源码解读(篇幅略长&#xff0c;建议收藏&#xff01;)-CSDN博客 周报 | 24.6.10-24.6.16文章汇总-CSDN…

APP启动流程

文章目录 主要构成详细启动流程参考链接 主要构成 App的启动流程主要涉及几个关键步骤和组件的交互&#xff0c;包括Launcher进程、ActivityManagerService&#xff08;AMS&#xff09;、Zygote进程、以及App进程本身。以下是详细的启动流程&#xff1a; 用户操作&#xff1a;…

[职场] 怎么写个人简历模板 #其他#知识分享

怎么写个人简历模板 怎么写个人简历模板1 姓名&#xff1a;xxx 性别&#xff1a;x 年龄&#xff1a;x岁 婚姻状况&#xff1a;x 最高学历&#xff1a;xx 政治面貌&#xff1a;xx 现居城市&#xff1a;xx 籍贯&#xff1a;xx 联系电话&#xff1a;xxxxxx 电子邮箱&#xff1a;xx…

SPN-PLMN运营商名称更新的一些规则及代码逻辑

规则简介 EONS也是更新PLMN,而不是SPN,SPN都是依据卡信息。 在MTK平台上,提供lookupOperatorName逻辑,根据SPN/EONS/NITZ刷新运营商名称显示内容,也可以自定义优先级。 流程接口 [SST] refreshSPN 更新SPN => Note:MTK源码是通过lookupOperatorName,客制化加入con…