【数据结构和算法】时间复杂度和空间复杂度

2023-10-27

目录


 


一、前言

二、时间复杂度

2.1时间复杂度表示形式

2.1.1规则:

3.1如何计算时间复杂度

3.1.1线性阶

3.1.2平方阶

3.1.3对数阶

常见的时间复杂度排序:

三、空间复杂度

3.1Java的基本类型内存占用


一、前言

数据结构和算法是程序的灵魂,这是某位程序员大佬所言,学习了这门,我们便可以在

编程之路越走越远。时间复杂度一般是我们所关心的。

二、时间复杂度

时间复杂度简单的说就是一个程序运行所消耗的时间,叫做时间复杂度,我们无法目测

一个程序具体的时间复杂度,但是我们可以估计大概的时间复杂度。

一段好的代码的就根据算法的时间复杂度,即使在大量数据下也能保持高效的运行速

率,这也是我们学习算法的必要性。

2.1时间复杂度表示形式

一般用O()来表示算法的时间复杂度,我们叫做大O记法。

2.1.1规则:

①用常数1取代运行时间中的所有的加法常数。比如,一个程序中有十条输出语句

我们不会记成O(10),而是用O(1)来表示。

②如果最高阶项不是1,那么去掉最高阶阶项,因为我们认为数字在后期影响不大。

如O(8n),则时间复杂度应该为O(n)。

③只保留最高阶项,如O(3n^2+6n+2),则时间复杂度为O(n^2)

3.1如何计算时间复杂度

计算时间复杂度主要看执行的次数和输入的关系

3.1.1线性阶

顾名思义,就是输入和输出成正比。


       for(int i=0;i<n;i++){
            sum+=i;
       } 

当n=1,执行一次,当n=100,执行100次 ,所以当为n时,执行n次,所以时间复杂度为

O(n)

3.1.2平方阶

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

外层for循环和内层for循环都是时间复杂度时n外层循环一次,内层循环n次,所以时间复杂度是

O(n^2)。

另一种:

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

外层复杂度是n,内层是1+2+...+n-1+n,所以是n(1+n)/2,由大O法得时间复杂度是O(n^2).

3.1.3对数阶

int i=1;n=100;
while(i<n){
i=i*2;
}

满足条件时,程序运行了,先设X个2相乘后大于n,则2^X=n,解得X=log2(n),所以时间

复杂度时O(log2(n)),log以2为底,n为真数。

常见的时间复杂度排序:

O(1)< O(log2(n))< O(n)< O(nlog2(n)< O(n^2)< O(n^3)< O(2^n)< O(n!)< O(n^n)

一般来说,到了O(n^2)及以上数据量大时运行效率极低,所以数据量大时,应选用更有的算法

三、空间复杂度

简单的说就是程序运行所需要的空间。

写代码我们可以用时间换空间,也可以用空间换时间。加大空间消耗来换取运行时间

的缩短加大时间的消耗换取空间,我们一般选择空间换时间。一般说复杂度是指时间复杂度

3.1Java的基本类型内存占用

计算机访问内存都是一次一个字节。

一个引用(机器地址)需要8个字节表示

如 Date date=new Date();则date这个变量需要8字节表示。

一般内存的使用,如果不够8字节,都会自动填充8字节(也就是8的整数倍)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【数据结构和算法】时间复杂度和空间复杂度 的相关文章

随机推荐

  • CUDA 内存不足如何解决?

    很多小伙伴在跑pytorch的项目的时候可能会出现CUDA内存不足的情况 或者在使用GPU的时候明明显存充足却一直显示显存不足的情况 这个时候我们要怎么解决呢 接下来就来看看小编是怎么解决的吧 小编复现大佬project发现GPU跑不动 出
  • 10大主流压力/负载/性能测试工具推荐

    在移动应用和Web服务正式发布之前 除了进行必要的功能测试和安全测试 为了保证互联网产品的服务交付质量 往往还需要做压力 负载 性能测试 然而很多传统企业在试水互联网 的过程中 往往由于资源或产品迭代速度等原因忽视了这一块工作 导致新产品上
  • GCP Compute Logging and Montioring, Lab

    最后更新2022 03 18 这个lab是实现logging的 起始依然是创建engine 一个是vm 另一个是gke cluster 创建gke cluster时需要设置enable logging 没看到 有时间时再再创建一遍 找一下位
  • 开平方算法的C++实现

    开方算法的设计与实现 问题 求解非线性方程 x 2 c
  • 如何防止http请求数据被篡改

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 故事的开始 面试官问了我一个问题 如何防止http请求中数据被篡改 回答 1 设置客户端IP黑 白名单 1 1 客户端所有请求 请求到代理服务器 nginx 代理服务器维护
  • 永恒之蓝 ms17_010漏洞

    复现环境 攻击机 Linux kali 192 168 119 128 靶机 Windows 7 x64 192 168 119 129 实验条件 两台机子可以相互ping通 并且靶机 无补丁 开启了445端口 防火墙是关闭的 关闭防火墙
  • TOP10. 合成复用原则——面向对象设计原则

    合成复用原则是面向对象设计原则的 7 条原则中剩下的最后一条 下面我们将对其进行详细地介绍 合成复用原则的定义 合成复用原则 Composite Reuse Principle CRP 又叫组合 聚合复用原则 Composition Agg
  • java延迟周期循环定时器样例

    package util import java text NumberFormat import java text ParseException import java text SimpleDateFormat import java
  • SmartFusion从FPGA到ARM(二)——MSS_GPIO外部中断和输入

    文章目录 前言 预期效果 0 MSS GPIO相关的函数 1 MSS GPIO模式配置 2 GPIO检测和控制实现 3 FPGA工程编译和运行 系列教程 SmartFusion从FPGA到ARM系列教程 前言 关于片上MCU基本外设的使用
  • oracle insert into values 多条_干货

    数据库技术 前言 一 数据库发展史 1 1 程序管理阶段 1 2 文件系统阶段 1 3 数据库系统阶段 二 数据库专业术语 2 1 关系 2 2 元组 2 3 属性 三 数据库及连接工具介绍 3 1 Oracle数据库介绍 3 2 连接工具
  • C++采用Daemon进行后台程序的部署

    文章目录 一 如何采用Daemon进行后台程序的部署 1 创建子进程 2 终止父进程 3 创建新的会话 4 改变当前工作目录 5 重设文件权限掩码 6 关闭不需要的文件描述 二 代码示例 一 如何采用Daemon进行后台程序的部署 在C 中
  • 了解新的GPT4代码生成器Cursor

    Cursor so 一个MIT大佬的作品 匆匆上线 我使用时版本是0 1 3 可以预见这样的软件将在未来产生巨大的影响 不禁让人思考程序员的可替代性在哪里 国内速度极快 生成代码的速度几乎比一些主流SEO搜索引擎还要快 不需要科学工具即可使
  • 网络编程面试题

    转载自 https blog csdn net ThinkWon article details 104903925 TCP IP网络模型 计算机与网络设备要相互通信 双方就必须基于相同的方法 比如 如何探测到通信目标 由哪一边先发起通信
  • 【小程序案例】支付宝小程序-MQTT模器,IoT设备通过WSS接入阿里云IoT物联网平台——设备接入类

    支付宝小程序 MQTT模拟器通过WSS接入阿里云IoT物联网平台 小程序效果 1 准备工作 1 1 注册阿里云账号 开通阿里云账号 并通过支付宝实名认证 https www aliyun com 1 2 免费开通IoT物联网套件 产品官网
  • Allegro如何制作封装

    非常详细的Allegro封装制作步骤 这里以制作SOP8封装为例进行讲解 1 利用PadDesigner制作焊盘 在Parameters选项卡输入焊盘的参数 输入各参数如下图所示 在Layers选项卡输入所要建立焊盘的参数 完成后点击保存
  • linux查看服务依赖关系,服务管理(1)

    原标题 服务管理 1 服务管理 什么是服务 在linux系统中 有一些特殊程序 启动后就会持续在后台执行 等待用户或者其他软件调用使用 这种程序我们称为服务 systemV与init systemV systemV当中有一个叫init的程序
  • 内核中line discipline的注册流程以及BT hciattach进程的启动

    以hci ldisc c为例 梳理内核中线路规程的注册流程 我们的N HCI的注册过程如下 bluetooth hci ldisc c module init hci uart init tty register ldisc N HCI h
  • openGL &GLSL texture()函数详解

    前言 一般 在三维项目添加纹理的时候 经常会看到有和纹理操作的函数 先看一段片元着色器程序 在片元着色器中 version 450 core out vec4 FragColor in vec2 TexCoords uniform samp
  • FPGA异步通信之间的数据打拍

    FPGA在通信的时候 经常会调用打拍函数对数据进行打拍 那么为什么要进行打拍呢 其实数据打拍也不是随便打的 那么我们先来看看异步通信中的亚稳态 由于FPGA设计中常常使用触发器 触发器工作时是有一定要求的 那就是触发器的时钟上升沿到来时间前
  • 【数据结构和算法】时间复杂度和空间复杂度

    目录 一 前言 二 时间复杂度 2 1时间复杂度表示形式 2 1 1规则 3 1如何计算时间复杂度 3 1 1线性阶 3 1 2平方阶 3 1 3对数阶 常见的时间复杂度排序 三 空间复杂度 3 1Java的基本类型内存占用 一 前言 数据