数据结构·复杂度讲解

1. 什么是数据结构

        数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。

        数据结构是用来在内存中管理数据的,类似的,我们熟悉的文件或数据库是在硬盘中管理数据的。内存中的数据是带点存储的,内存大小一般较小(8G/16G),而硬盘中的数据是不带电存储的,大小一般(512G\1T)。带电存储就是用电信号保存数据,如果突然我们的计算机断电了,那内存中的数据就都没了。

        带电存储和不带电存储算是相辅相成的关系,内存中的数据处理好了之后,就会存到硬盘上,防止断电后丢失。

2. 算法的复杂度

        算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源。因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。

        时间复杂度主要用来衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间。随着如今硬件的迭代升级,内存越来越大,现在我们已经不太关注空间复杂度了。

3. 时间复杂度

3.1 时间复杂度的概念

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

        那么我们现在判断一下下面这段代码的时间复杂度

        

        首先是两层循环嵌套:F(N) = N^2

        然后是2*N次的循环:F(N) = 2 * N

        最后是10次循环:F(N) = 10

        把他们都加在一起最终结果就是:F(N) = N^2 + 2*N + 10

        但是实际上,我们并不需要把时间复杂度计算的那么精准,只需要知道大概执行次数,所以这里引进了大O的渐进表示法

3.2 大O的渐进表示法

        推导大O阶方法:

        1. 用常数1替代运行时间中所有加法常数

        2. 在修改后的运行次数函数中,只保留最高阶项

        3. 如果最高阶项存在且不为1,则去除与这个项相乘的常数

        上一道题用大O的渐进表示法的结果就是O(N^2)

        其实说白了,这个方法的核心就是去估计最差的预期的数量级有多大

3.3 例题

3.3.1 冒泡排序的时间复杂度

                

        冒泡排序的遍历 (N - 1) + (N - 2) +···+ 3 + 2 + 1 次

        很明显这是个等差数列,头加尾除二,最后结果就是 O(N^2)

3.3.2 二分查找的时间复杂度

        二分查找最开始查找区间长度是N,找一次缩小一半,就是除2,最坏的情况就是最后区间长度缩小为1,或者为-1(没找到)。

        那么除多少个2就相当于找了多少次,我们假设除了x个2

        N /2 /2 /2······/2 == 1        两边同时成 2^x

        N == 2^x

        x == \log_{2}N

        所以最后二分查找的时间复杂度就是 O(\log_{2}N),因为这个对数不好写出来,所以有时候也会简写成 O(logN) ,大家看到这种写法的时候要注意识别。如果不是以2为底的话就不能简写了

3.3.3 计算阶乘的时间复杂度(简单阶乘)

                

        我们分析一下,递出去的时候要走N-1次到头,归回来也要走N-1次,然后最后返回数值走1次,所以说精细算的话一共走2N-1次,时间复杂度为O(N)

4. 空间复杂度

        空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用存储空间的大小的量度。

        空间复杂度不是程序占用了多少Byte的空间,而是计算同一时间新开辟变量最多时的新变量个数,如果没有新开辟变量也是是O(1),因为空间是可以重复利用的。

        空间复杂度计算规则和时间复杂度类似,也使用大O渐进表示法

        其实空间复杂度和时间复杂度的判断都有一种感性的感觉,我们要去思考这个算法的思路是什么,而不是死磕代码里有几个for循环什么的

        

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

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

相关文章

【k8s系列】(202402) 证书apiserver_client_certificate_expiration_seconds

apiserver_client_certificate_expiration_second证书定义的位置:kubernetes/staging/src/k8s.io/apiserver/pkg/authentication/request/x509/x509.go at 244fbf94fd736e94071a77a8b7c91d81163249d4 kubernetes/kubernetes (github.com) apiserver_client_certi…

机器学习逻辑回归模型训练与超参数调优 ##3

文章目录 [TOC]基于Kaggle电信用户流失案例数据(可在官网进行下载)逻辑回归模型训练逻辑回归的超参数调优 基于Kaggle电信用户流失案例数据(可在官网进行下载) 数据预处理部分可见: 机器学习数据预处理方法&#xff0…

【Linux系统化学习】自定义简易shell

目录 环境变量在进程替换中的继承 在当前进程中添加环境变量 putenv函数 环境变量被继承的原因 使用ecexle传递环境变量 传递自己的环境变量表 自定义简易的shell 获取主机、使用者、工作目录 获取命令 切割分解命令 创建子进程执行命令 内建命令的特殊处理 完整代…

AI改编游戏大电影《使命召唤:幽灵重生》(下)

AI改编游戏大电影《使命召唤:幽灵重生》(下) 幽灵重生携生化武器毁灭人类,普莱斯上尉点上雪茄拿起武器,英雄再次迎来使命的召唤! 《使命召唤:幽灵重生》(下)&#xff1a…

6.s081 学习实验记录(五)traps

文章目录 一、RISC-V assembly简介问题 二、Backtrace简介注意实验代码实验结果 三、Alarm简介注意实验代码实验结果 一、RISC-V assembly 简介 git checkout traps,切换到traps分支user/call.c 文件在我们输入 make fs.img 之后会被汇编为 call.asm 文件&#xf…

【VTKExamples::PolyData】第二十一期 ImplicitPolyDataDistance

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例ImplicitPolyDataDistance,并解析接口vtkImplicitPolyDataDistance,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)…

docker自定义镜像并使用

写在前面 本文看下如何自定义镜像。 ik包从这里 下载。 1:自定义带有ik的es镜像 先看下目录结构: /opt/program/mychinese [rootlocalhost mychinese]# ll total 16 -rw-r--r-- 1 root root 1153 Feb 5 04:18 docker-compose.yaml -rw-rw-r-- 1 el…

Docker进阶篇-compose容器编排

一、描述 Docker-Compose是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。 Compose是Docker公司推出的一个工具软件,可以管理多个Docker容器组成一个应用。需要定义 一个YAML格式的配置文件docker-compose.yml,配置好多个容器…

【iOS ARKit】人形遮挡

人形遮挡简介 在 AR系统中,计算机通过对设备摄像头采集的图像进行视觉处理和组织,建立起实景空间,然后将生成的虚拟对象依据几何一致性原理嵌入到实景空间中,形成虚实融合的增强现实环境,再输出到显示系统中呈现给使用…

微信支付服务商,商户快速进件,减少工作量

大家好,我是小悟 服务商拓展特约商户,人工录入大量商户资料,耗时耗力。商户对标准费率不满意,无法说服商户先签约再帮其调整费率。 为了减少服务商工作量,服务商快速进件工具来了,分为移动端和管理端。用好…

Matplotlib热力图的创意绘制指南【第54篇—python:Matplotlib热力图】

文章目录 Matplotlib热力图的创意绘制指南1. 简介2. 基本热力图3. 自定义颜色映射4. 添加注释5. 不同形状的热力图6. 分块热力图7. 多子图热力图8. 3D热力图9. 高级颜色映射与颜色栏设置10. 热力图的动态展示11. 热力图的交互性12. 标准化数据范围13. 导出热力图 总结&#xff…

确定问卷调查样本量

目录 1. 问卷数据类型1.1 定性数据&定性分析1.2 定量数据&定量分析 2. 确定初始样本容量:2.1 公式:2.2 Z值2.3 p2.4 e2.5 举例 3.调整初始样本容量:3.1 公式:3.2 结论就是 小结: 1. 问卷数据类型…