时间复杂度

news2024/11/21 2:37:30

学习《代码随想录》

  • 时间复杂度
    • 为什么要引入时间复杂度和空间复杂度?
    • 什么是时间复杂度?
    • 这个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 的内存管理,这一点消耗我们完全可以接受,而换取来的时间复杂度性能的提升是我们更关注的。

空间复杂度

什么是空间复杂度?

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

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

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

相关文章

OpenCV4 学习指导2 —— 多种方式访问图像的像素值

图像像素访问 1、测试用例1.1、颜色缩减算法1.2、颜色缩减示例 2、图像矩阵的存储与访问2.1、图像的存储方式2.2、图像的访问方式2.2.1、C 指针:高效的访问方式2.2.2、迭代器:安全的访问方式2.2.3、行列索引:动态计算地址2.2.4、LUT 查询函数…

tiechui_lesson06_注册表操作

这节课主要学习注册表的相关操作,包括注册表的打开,读取,修改,删除。可以自己通过底层API手动来获取和设置注册表,也可以用微软提供的运行时函数。我的看法是底层函数用来了解原理,真正在代码中使用的时候还…

《三十岁,一切刚刚开始》读书笔记

目录 书籍简介 经典语句 书籍简介 在抖音上看到此书,顺便看了看。 《三十岁,一切刚刚开始》作者李尚龙。写给敢于探险、敢于突破自己的年轻人的进取之书。人这一生可以有无数种可能。 如果你近期特别丧,或者正处于瓶颈期间,不…

VLAN【实验】

虚拟局域网VLAN VLAN即虚拟局域网,是将一个物理的局域网在逻辑上划分成为多个广播域的技术。通过在交换机上配置VLAN,可以实现在同一个VLAN内的用户进行二层互访,而不通的VLAN间的用户被二层隔离。这样既能够隔离广播域,又能够提…

身临其境文化之旅——VR全景图片畅游世界各地文化景点

文化旅游是一种独特的旅游体验,它不仅让人们感受到异域文化的魅力,更能增进对世界的了解和认知。VR全景图片和文化旅游之间有着密不可分的关系。作为一种数字化技术,VR全景图片可以为文化旅游提供更加深入、真实、立体的体验。随着VR技术的发…

品牌宣传软文发布,多久一次合适?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 品牌宣传有许多手段,线下活动,电视广告,讲座,招商等手段,其中软文发布是性价比较高的一种方式,那么软文宣传多久一…

神奇,声网Web SDK还能这么实现直播中美颜功能

前言 本篇文章是通过使用声网Web SDK来实现直播中美颜效果的深度体验文章,其中发现了屏幕共享并本地合图多个视频、图片,声网美颜插件等功能特性十分强大和专业,特为此做一个技术体验的分享,毕竟好技术就是要去传播的。 随着音视…

深入了解Facebook广告工具和资源,优化你的营销活动

作为企业主或营销人员,利用Facebook的广告工具和资源,可以帮助你更好地推广品牌、吸引潜在客户,并提升销售业绩。在本文中,我们将深入了解Facebook的广告工具和资源,帮助你优化营销活动,实现更好的效果。 1…

Ubuntu多卡服务器、普通用户安装paddlepaddle环境

Ubuntu多卡服务器、普通用户安装paddlepaddle环境 1. 建立conda虚拟环境2. 安装paddlepaddle gpu版本2.1 选择cuda版本2.2 安装paddle 3. 验证及排错3.1 验证方法3.2 第一次报错:cuda问题3.3 第二次报错:NCCL问题(多卡) 4. 设置环…

echarts 地图_地图 json 免费下载_自定义icon

Echarts 常用各类图表模板配置 注意: 这里主要就是基于各类图表,更多的使用 Echarts 的各类配置项; 以下代码都可以复制到 Echarts 官网,直接预览; 图标模板目录 Echarts 常用各类图表模板配置一、地图二、环形图三、…

Microsoft Edge浏览器崩溃,错误代码: STATUS_STACK_BUFFER_OVERRUN

--------------------8日15:34更新------------------- 8号下午经历了短暂的兴奋,突然就好了,但是转瞬即逝,试用一会后就不行了。 目前使用beta版本是很稳定的。 最新版的beta也可以,注意数据同步。 --------------------原文-…

ChatGPT的Prompts关键词提示工程集合:包含AI绘画和GPT文本对话

文章目录 1 前言2 Awesome ChatGPT Prompts2.1 文本提示词2.2 提示词汇总2.3 绘画提示词 3 PromptBase4 Prompt-Engineering-Guide5 讨论 1 前言 明确一个概念,ChatGPT是一种大型的自然语言处理模型,它基于深度神经网络和语言模型技术,可以通…

c++中vector初始化的一个有趣的细节问题

vector的初始化&#xff0c;相信会写c的人都很熟悉&#xff0c;c11对此也改进了很多&#xff0c;更方便。 以下是使用vector初始化的几个例子&#xff1a; 从数组初始化vector&#xff1a; int arr[] {1, 2, 3, 4, 5}; vector<int> vec(arr, arr sizeof(arr) / size…

定时清理文件脚本

一、定时清理文件 编写一个bat脚本。新建一个文本文档&#xff08;txt文件&#xff09;&#xff0c;在里面输入echo offdel /f /s /q E:\temp\*.*&#xff0c;E代表E盘&#xff0c;temp是E盘下的需要清理的文件夹&#xff0c;运行脚本后&#xff0c;就是清理E:\temp文件夹下的…

Win下查看端口占用情况并释放该端口

开发中&#xff0c;经常会遇到端口意外被占用&#xff0c;需释放该端口的问题。一般解决思路是找到被占用端口关联的进程号&#xff0c;即PID&#xff0c;后通过PID终止该进程以释放该端口。 netstat 命令 显示协议统计信息和当前 TCP/IP网络连接,常用参数: -a: 显示所有连接和…

Packet Tracer - 配置基于区域的策略防火墙 (ZPF)

Packet Tracer - 配置基于区域的策略防火墙 (ZPF) 拓扑图 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 交换机端口 R1 G0/1 192.168.1.1 255.255.255.0 不适用 S1 F0/5 S0/0/0 (DCE) 10.1.1.1 255.255.255.252 不适用 不适用 R2 S0/0/0 10.1.1.2 255…

项目管理工具的必备功能,你需要知道这些

一个项目有很多事情需要计划、控制和管理&#xff0c;因此需要使用项目管理软件来对项目进行管理&#xff0c;除了制定计划、进度跟踪等之外&#xff0c;项目管理软件还应该有这些功能&#xff1a; 甘特图&#xff1a;帮你规划任务。比如说甘特图就可以设置多级任务、耗时和分…

AI与全民开发:挑战和机会并存

注&#xff1a;全民开发的英文是Citizen Development&#xff0c;由咨询公司Gartner在2010年提出的概念&#xff0c;指非专业开发人员使用低代码或无代码平台创建应用程序&#xff0c;无需IT部门的支持&#xff0c;旨在提高生产力并降低开发成本。 国内普遍将Citizen Developme…

dubbo服务导出源码解析

服务导出流程 需要对源码debug&#xff0c;可以参考官网的源码分析进行debug&#xff1a;https://cn.dubbo.apache.org/zh-cn/docsv2.7/dev/source/export-service/接收到 ContextRefreshedEvent 刷新事件&#xff0c;调用 ServiceBean.export()&#xff0c;会执行 ServiceCon…

刷力扣 LeetCode 算法题需要充值会员吗?

一、刷题成就 大家好&#xff0c;我是『负雪明烛』。 在过去的这些年里&#xff0c;我的一项业余爱好就是写作算法题解。如今写了上千篇题解了&#xff01; 在 CSDN 上&#xff0c;我的博客获得了 200 多万的阅读。 在力扣中国题解区&#xff0c;我也获得了180 万的阅读。…