数据结构与算法(一)——时间复杂度和空间复杂度

news2024/10/6 18:29:07

时间复杂度

1、概念引入

先说结论:时间复杂度是用来估计算法运行时间的一个式子(单位)。

例如:这四组代码,哪组运行时间最短?

q:我们该用什么方式来体现算法运行的快慢

a:我们利用时间复杂度估计算法运行时间,时间复杂度是一个大致时间,而不是精确时间。

那么,以上四组代码可以分别用时间复杂度 O(1)、O(n) 、 O(n²) 、 O(n³)来表示。

 

2、O()括号中填的内容是单位

按照上述的估算方法,感觉上,下面这组代码的时间复杂度好像是O(3)

 下面这组代码的时间复杂度好像是O(n²+n)

但是并非这样,因为O(1)、O(n)之中,1和n都是一个单位,描述的是大致的时间;

单位是计量事物的标准量名称,厘米是单位,米是单位,1和n还有n平方之类的也是单位,但是在时间复杂度的规定中,1被规定为一个单位,3不是一个单位,打印3条语句和打印1条语句花费的时间对于计算机来说几乎一致,它们都是同一个规模的程序,所以时间复杂度都是O(1)。

 

3、时间复杂度O(logn)

当程序出现循环减半时,会有程序时间复杂度为O(logn)的情况。

看下面这个程序:

n=64时:

 如何规定这种程序的时间复杂度呢?

 

4、关于时间复杂度我们需要知道的

  • 时间复杂度是用来估计算法运行时间的一个式子(单位)。
  • 一般来说,时间复杂度高的算法比复杂度低的算法慢。
  • 常见的时间复杂度(按效率排序):O(1) < O(logn) < O(n) < O(nlogn) < O(n²) < O(n²logn) < O(n³)
  • 复杂问题的时间复杂度:O(n!)O(2^n)O(n^n)

5、如何简单快速地判断算法复杂度

 

空间复杂度 

1、概念

空间复杂度是用来评估算法内存占用大小的式子

2、空间复杂度的表示方式

与时间复杂度完全一样

  • 算法使用了几个变量:O(1)
  • 算法使用了长度为n的一位列表:O(n)
  • 算法使用了m行n列的二维列表:O(mn)

3、空间换时间

比如我写程序的时候,优先考虑让它运行速度更快,即使多占用一些内存。

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

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

相关文章

安卓apk包破解

安卓apk包破解前言一、前置工作二、正式开始前言 拿到安卓的apk包如何&#xff0c;如何破解呢。流程如下 一、前置工作 拿到一个apk文件&#xff0c;修改其后缀为zip 例如&#xff1a; test.apk > test.zip 使用解压工具进行解压。解压后如图 获取到原始文件目录&…

Django项目——通过APIView实现API访问,增删改查数据库

前提 该文章在已有项目的基础上进行修改 https://blog.csdn.net/qq_38122800/article/details/128583379?spm1001.2014.3001.5502 1、配置序列化器 序列化器包含序列化和反序列化两个过程,简单点理解就是 序列化 : 将从数据库中查的数据变为前端页面可以接受的json数据 反…

机器学习的逻辑回归(Logistic)的实例————预测学生是否被录取

目录要求代码1. 导入模块2. 导入数据3. 求解theat的最优值,画出样本的位置和决策边界。4. 画出迭代函数随迭代次数变化的曲线,代价函数最终的收敛值5.比较三种学习率的代价函数随迭代次数变化的曲线5.1 学习率为0.00035.2 学习率为0.00055.3 学习率为0.00001要求 代码 1. 导入…

PySpark和RDD对象详解

目录 一.了解Spark、PySpark Spark是什么 Python on Spark Pyspark 小结 二.构建PySpark执行环境入口对象 PySpark的编程模型 小结 三.RDD对象 python数据容器转RDD对象 注意 演示 读取文件转RDD对象 演示 一.了解Spark、PySpark Spark是什么 定义:Apache Spark是用…

计算机组成原理【2】

文章目录一 计算机系统的层次结构1.1 思维导图1.2 计算机机器的五个层次1.3 三种级别的语言1.4 区分计算机组成原理和计算机体系二 计算机性能指标2.1 思维导图2.2 主存储器性能指标2.3 CPU性能指标2.4 系统整体的性能指标2.5 系统整体性能指标【动态测试】三 进位计数制3.1 思…

springboot整合opencv进行灰度图像与RGB图像互转

问题&#xff1a; 在开发过程中遇到一个问题&#xff0c;需要在图片上加上数据&#xff08;原卷留痕&#xff09;&#xff0c;由于图片是灰度的&#xff0c;无法进行彩色编辑&#xff0c;需要将灰度图片转成RGB图片&#xff0c;才能进行彩色编辑&#xff0c;于是想到用opencv进…

Grafana 告警模块介绍

Grafana 系列文章&#xff0c;版本&#xff1a;OOS v9.3.1 Grafana 的介绍和安装Grafana监控大屏配置参数介绍&#xff08;一&#xff09;Grafana监控大屏配置参数介绍&#xff08;二&#xff09;Grafana监控大屏可视化图表Grafana 查询数据和转换数据Grafana 告警模块介绍 Gra…

Java对接JeePay支付、转账实现以及回调函数

最近公司对接了第三方支付平台JeePay&#xff0c;看到网上文章比较少&#xff0c;给大家发一篇对接微信支付的吧&#xff0c;支付宝也一样&#xff0c;更换里面的参数即可&#xff0c;官方文档地址&#xff1a;系统介绍 - 计全文档&#xff0c;具体的服务需要大家去搭建&#x…

为ABP新增手机验证模块

当前手机验证基本是标配&#xff0c;但Abp自身并没有实现这个功能&#xff0c;于是有了通过自定义模块实现的想法。 经过研究&#xff0c;发现要实现这个&#xff0c;只要重写和替换包含ReplaceEmailToUsernameOfInputIfNeeds方法的类就可以了。但要实现这个&#xff0c;首先要…

sql server提供三种常用截取字符串方法,LEFT()、RIGHT()、SUBSTRING()

一、sql server提供了三种常用截取字符串方法&#xff0c;LEFT()、RIGHT()、SUBSTRING() 1、LEFT()函数语法&#xff1a;LEFT(character,integer) 注释&#xff1a;参数1&#xff1a;要截取的字符串&#xff0c;参数2&#xff1a;截取字符个数说明&#xff1a;返回从字符串左边…

你的 VS Code 扩展值得信赖吗?

Aqua Nautilus 研究人员最近发现&#xff0c;攻击者可以轻松地冒充流行的 Visual Studio Code 扩展并诱骗不知情的开发人员下载它们。VSCode 是迄今为止最受欢迎的 IDE&#xff1b;StackOverflow 的一项调查指出&#xff0c;其目前已被 74.48% 的开发人员所使用。VSCode 的强大…

SPDK技术浅析

目录SPDK基础知识SPDK架构SPDK使用rpc后台启动基础机制分析后端vhost异步I/O写该篇的来由是因为翻阅到了TriCache: A User-Transparent Block Cache Enabling High-Performance Out-of-Core Processing with In-Memory Programs文章&#xff0c;其中对SPDK的运用的炉火纯青&…

数据结构(1)并查集

(4条消息) 第五课、Trie树、并查集、堆和堆排序_yan__kai_的博客-CSDN博客 活动 - AcWing 并查集作用&#xff1a;一群元素将可以归类到一个代表元素上。可以维护元素到根节点的距离。可以维护每个并查集的大小。 基本操作回顾基础课&#xff0c;特别是“食物链”那道题 目录…

【Django项目开发】部门管理模块的开发(八)

文章目录一、模型类设计二、视图设计1.都有哪些接口三、序列化器类设计四.分页操作1.utils工具中定义pagination.py2.视图类中使用五.路由配置一、模型类设计 一个部门下面可能会有很多子部门&#xff0c;一个子部门上面可能会有父部门&#xff1b;即部门内部之间进行关联&…

国科大模式识别与机器学习2022年期末总结

我根据本学期老师说的考试重点和我自身的情况总结的&#xff0c;希望能帮助到你&#xff0c;如有错误欢迎指正 目录第三章 判别函数Fisher线性判别感知机算法第四章 特征选择和提取K-L变换第五章 统计学习学习基础损失函数风险正则化过拟合欠拟合泛化误差第六章 有监督学习有监…

【jQuery】常用API——jQuery内容文本值

要针对元素的内容还有表单的值操作。 普通元素内容 html()&#xff08;相当于原生 inner HTML) html(); // 获取元素的内容html(内容); // 设置元素的内容<script src"../jquery.min.js"></script> </head><body><div><span>我是…

118页4万字智慧检务大数据平台解决方案

【版权声明】本资料来源网络&#xff0c;知识分享&#xff0c;仅供个人学习&#xff0c;请勿商用。【侵删致歉】如有侵权请联系小编&#xff0c;将在收到信息后第一时间删除&#xff01;完整资料领取见文末&#xff0c;部分资料内容&#xff1a; 目录 第1章 前言 1.1、 政策背…

docker-compose keep-alive mysql8 互为主从

一、准备2台物理机器master-1、master-2&#xff0c;目标虚拟VIP。   VIP:192.168.1.139   master-1:192.168.1.17   master-2:192.168.1.20    二、然后分别在2台物理机器master-1、master-2上使用docker-compose安装mysql8&#xff0c;并配置互为主从。 1&#xff09…

优先级队列、仿函数和反向迭代器

文章目录优先级队列priority_queue的模拟实现框架无参的构造(默认构造)迭代器区间构造向上调整向下调整插入删除取堆顶的数据求数据个数验满初识仿函数模拟实现仿函数更改后的向上调整仿函数更改后的向下调整反向迭代器具体实现优先级队列 1.优先队列是一种容器适配器&#xf…

微信转账api(企业付款)

企业付款介绍 提供企业向用户付款的功能&#xff0c;支持企业通过API接口付款&#xff0c;或通过微信支付商户平台网页功能操作付款。 1. 充值 登录微信支付商户平台&#xff0c;通过网页充值功能充值&#xff08;商户平台-资金管理-现金管理-充值&#xff09;。 温馨提示&a…