时间复杂度

学习《代码随想录》

  • 时间复杂度
    • 为什么要引入时间复杂度和空间复杂度?
    • 什么是时间复杂度?
    • 这个O是什么意思?
    • 时间复杂度越低越好?
  • 内存管理
    • 什么是内存空间?(C++为例)
    • 为什么总说C/C++更偏向底层?
    • 为什么一般不用Python写算法?
    • 为什么要内存对齐?
    • 内存对齐的效果?
  • 空间复杂度
    • 什么是空间复杂度?

时间复杂度

为什么要引入时间复杂度和空间复杂度?

在这里插入图片描述

从 leetcode 官方判题系统可以看出,这两个属性是评价程序性能好坏的关键指标,执行用时反映了时间复杂度,内存消耗反映空间复杂度。

什么是时间复杂度?

时间复杂度是一个函数,它定性描述了算法的运行时间,我们通常用操作单元数来代表它。记n为数据规模,f(n) 为操作单元数,O(f(n))表示时间复杂度。

这个O是什么意思?

O表示上界,也就是程序运行的最坏情况。但在业界并非如此。
例如插入排序,若输入数据有序,时间复杂度为O(n),若逆序则为 O(n^2) ,所以它的时间复杂度为 O(n^2) ;
如快速排序,一般情况时间复杂度为O(nlogn),但若数据有序,则为 O(n^2) ;
但是,我们仍记快速排序的时间复杂度为O(nlogn)。在业界 O 并不表示最坏,而是一般情况。

时间复杂度越低越好?

还真不是,还要考虑数据规模 n 的影响。数学中经常提到指数 2^n 的上升速度大于所有幂次,如: 100n。
这并不错,但如果我的实际业务 n 总是小于5,显然指数就更优了。

内存管理

什么是内存空间?(C++为例)

内存空间 固定部分不会因为程序的运行而消耗内存,所以我们只考虑可变部分。

为什么总说C/C++更偏向底层?

因为它们内存管理机制不同。
C/C++:内存堆空间的申请和释放完全靠自己管理;
Java:依赖 JVM 实现内存管理;
Python:通过Python内存管理器管理内存,无需程序员关心。
显然C/C++灵活性更强,对底层的可操作性更强。

为什么一般不用Python写算法?

在Python中,“万物皆对象”,Python解释器将对象和数据结构封装得很好,所以它的基本数据类型所占内存要远大于纯数据类型。这很方便,但对内存有极高要求的算法来说,这种浪费是不可容忍的。

为什么要内存对齐?

  1. 平台原因:有些平台只能在一些地址处获取特定类型的数据。所以为了让同一个程序在多平台运行,需要内存对齐;
  2. 硬件原因:进行内存对齐后,CPU访问数据的速度将大大提升;

内存对齐的效果?

CPU是按照块来读取内存的,下面假设CPU将内存分为4字节的块,当前面已经有一个1字节的 char 型数据,要读取一个4字节大小的 int 型数据。
如果进行内存对齐:
内存对齐
不进行内存对齐:
不内存对齐
CPU在两次寻址后,还需要将结果进行一次合并操作!
这里其实消耗了内存,但有别于 Python 的内存管理,这一点消耗我们完全可以接受,而换取来的时间复杂度性能的提升是我们更关注的。

空间复杂度

什么是空间复杂度?

一个算法在运行过程中占用内存空间大小的度量。基于它可以预先估计运行程序需要多少内存。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

T-SQL游标的使用

一.建表 INSERT INTO cloud VALUES( 你 ) INSERT INTO cloud VALUES( 一会看我 ) INSERT INTO cloud VALUES( 一会看云 ) INSERT INTO cloud VALUES( 我觉得 ) INSERT INTO cloud VALUES( 你看我时很远 ) INSERT INTO cloud VALUES( 你看云时很近 ) 二.建立游标 1.游标的一般格…

判断大小端的错误做法

这里不详细讲解大小端的区别,只讲解判断大小端的方法。 1.大端,小端的区别 0x123456 在内存中的存储方式 大端是高字节存放到内存的低地址 小端是高字节存放到内存的高地址 2.大小端的判断 1.错误的做法 int main() {int a0x1234;char c(char)a;if(…

2022年宜昌市网络搭建与应用竞赛样题(三)

网络搭建与应用竞赛样题(三) 技能要求 (总分1000分) 竞赛说明 一、竞赛内容分布 “网络搭建与应用”竞赛共分三个部分,其中: 第一部分:网络搭建及安全部署项目(500分&#xff0…

基于SpringBoot3从零配置SpringDoc

为了方便调试,更好的服务于前后端分离式的工作模式,我们给项目引入Swagger。 系列文章指路👉 系列文章-基于SpringBoot3创建项目并配置常用的工具和一些常用的类 文章目录 1. SpringFox2. SpringDoc2.1 引入依赖2.2 配置文件2.3 语法2.4 使…

PCL学习八:Keypoints-关键点

参考引用 Point Cloud Library黑马机器人 | PCL-3D点云 PCL点云库学习笔记(文章链接汇总) 1. 引言 关键点也称为兴趣点,它是 2D 图像或 3D 点云或曲面模型上,可以通过检测标准来获取的具有稳定性、区别性的点集。从技术上来说,关键…

Microsoft Edge新功能测评体验

Microsoft Edge使用体验 Microsoft Edge是一款现代化的浏览器,它拥有众多功能和强大的性能,为用户带来更加流畅的浏览体验。 Edge最近推出了分屏功能,支持一个窗口同时显示两个选项卡,这可以大大提高生产力和多任务处理能力。 一…

API接口对程序员的帮助有哪些,参考值简要说明

API接口对程序员的帮助有哪些 提高开发效率:通过API接口,程序员能够在不用重复编写代码的情况下,直接获取其他应用程序提供的服务或数据,极大地提高了开发效率。 减少错误率:使用API接口可以避免手动输入数据容易出现…

洛谷P5047 [Ynoi2019 模拟赛] Yuno loves sqrt technology II(离线区间逆序对+莫队二次离线)

题目 给你一个长为n(1<n<1e5)的序列a(0<ai<1e9)&#xff0c; m(1<m<1e5)次询问&#xff0c;每次查询一个区间[l,r]的逆序对数&#xff0c;可离线。 思路来源 登录 - 洛谷 三道经典分块题的更优复杂度解法&[Ynoi2019模拟赛]题解 - 博客 - OldDriverT…

Flutter性能分析工具使用

使用前提 flutter常用的性能分析工具&#xff0c;这些工具都集成在android studio中&#xff0c;基本能满足我们的需求了。在下面介绍的几个工具中&#xff0c;Flutter Performance和Flutter Inspector都能够直接在debug模式下使用&#xff0c;但是DevTools只能在profile模式下…

typescript:熟练掌握typescript

一、简介 TypeScript 教程 | 菜鸟教程 TypeScript (简称:TS)是JavaScript的超集 (JS有的TS 都有)。 TypeScriptType JavaScript (在JS 基础之上&#xff0c;为JS添加了类型支持)。 哔哩哔哩_教程_TypeScript 二、TypeScript为什么要为js增加类型支持&#xff1f; 背景&am…

4年外包出来,5次面试全挂....

我的情况 大概介绍一下个人情况&#xff0c;男&#xff0c;毕业于普通二本院校非计算机专业&#xff0c;18年跨专业入行测试&#xff0c;第一份工作在湖南某软件公司&#xff0c;做了接近4年的外包测试工程师&#xff0c;今年年初&#xff0c;感觉自己不能够再这样下去了&…

鲲鹏展翅 信安高飞 | 鲲鹏开发者峰会2023-麒麟信安技术论坛成功举办!

2023年5月6日-7日&#xff0c;以“创未来 享非凡”为主题的鲲鹏开发者峰会2023在东莞松山湖举办。鲲鹏产业生态繁荣&#xff0c;稳步发展&#xff0c;正在成为行业核心场景及科研领域首选&#xff0c;加速推动数字化转型。 作为鲲鹏生态重要合作伙伴&#xff0c;麒麟信安受邀举…

Notion Ai中文指令使用技巧

Notion AI 是一种智能技术&#xff0c;可以自动处理大量数据&#xff0c;并从中提取有用的信息。它能够 智能搜索&#xff1a;通过搜索文本和查询结果进行快速访问 自动归档&#xff1a;可以根据关键字和日期自动将内容归档 内容分类&#xff1a;可以根据内容的标签和内容的…

交互式数据分析和处理新方法:pandas-ai =Pandas + ChatGPT

Python Pandas是一个为Python编程提供数据操作和分析功能的开源工具包。这个库已经成为数据科学家和分析师的必备工具。它提供了一种有效的方法来管理结构化数据(Series和DataFrame)。 在人工智能领域&#xff0c;Pandas经常用于机器学习和深度学习过程的预处理步骤。Pandas通…

基于JavaWeb实现的汽车维修管理系统

【简介】 本系统基于springboot mybatis jps架构开发&#xff0c;前后端分离&#xff0c;开发环境为jdk1.8、mysql、maven。系统功能主要分为汽车维修管理、配件管理、财务管理、基础数据管理、系统维护5大模块。 【功能结构】 【技术架构】 系统架构&#xff1a;springboot …

深度学习第J6周:ResNeXt-50实战解析

目录 一、模型结构介绍 二、前期准备 三、模型 三、训练运行 3.1训练 3.2指定图片进行预测 &#x1f368; 本文为[&#x1f517;365天深度学习训练营]内部限免文章&#xff08;版权归 *K同学啊* 所有&#xff09; &#x1f356; 作者&#xff1a;[K同学啊] &#x1f4cc; …

移动端异构运算技术 - GPU OpenCL 编程(基础篇)

一、前言 随着移动端芯片性能的不断提升&#xff0c;在移动端上实时进行计算机图形学、深度学习模型推理等计算密集型任务不再是一个奢望。在移动端设备上&#xff0c;GPU 凭借其优秀的浮点运算性能&#xff0c;以及良好的 API 兼容性&#xff0c;成为移动端异构计算中非常重要…

Echarts使用本地JSON文件加载不出图表的解决方法以及Jquery访问本地JSON文件跨域的解决方法

前言 最近需要做一个大屏展示&#xff0c;需要用原生html5cssjs来写&#xff0c;所以去学了一下echarts的使用。在使用的过程中难免碰到许多BUG&#xff0c;百度那是必不可少的&#xff0c;可是这些人写的牛头不对马嘴&#xff0c;简直是标题党一大堆&#xff0c;令我作呕&…

fastjson 代码执行 (CNVD-2017-02833)

漏洞存在原因 在fastjson<1.2.24版本中&#xff0c;在解析json的过程中&#xff0c;支持使用autoType来实例化某一个具体的类&#xff0c;并调用该类的set/get方法来访问属性。而在1.24<fastjson<1.2.48版本中后增加了反序列化白名单。 漏洞复现过程如下 在vulfocu…

龙的画法图片

由龙老师画素描中国龙的方法,大概可以遵循以下步骤: 确定龙的姿态和比例:在纸上简单地画出龙的基本形状和姿态,包括身体的长度,颈部、腿和尾巴的位置和比例关系。 添加细节:在基本形状的基础上,开始添加一些细节,如龙的头部、眼睛、鼻子、嘴巴、爪子等。注意要保持姿态和比例…