评估算法的优劣指标-时间复杂度-空间复杂度-常数操作

2024-05-08 19:32

本文主要是介绍评估算法的优劣指标-时间复杂度-空间复杂度-常数操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一 、时间复杂度

1 看常数操作

        常数操作算O(1)

        常见的算术运算(+、-、*、/、% 等)

        常见的位运算(>>、>>>、<<、|、&、^等)

        赋值、比较、自增、自减操作等

        数组寻址操作

        常数时间操作

                数组-按地址偏移量直接命中 这个就是O(1)

        非固定时间操作

                链表-需要挨个寻址,这个就不是常数时间操作就是O(N)

2 算法最差情况的复杂度是这个算法的复杂度

        两层循环,第二层循环是第一层的 i-1 次 这个是等差数列,最后转换成式子  a * n^2 +b * n 这里时间复杂度只看最高阶项部分n^2 所以时间复杂度是O(N^2)

3 例子

排序算法 算时间复杂度

冒泡  O(N^2) 任何情况不变

        循环数组每个数

        循环N-1 做交换冒泡

插入排序 O(N^2) 在有序情况下是O(n) 但是时间复杂度O只看最不好的情况

        循环数组每个

        N-1 这个数向前比较如果小于就交换

选择 排序 O(N^2) 比冒泡号,因为空间换时间,交换最多只有N次

        循环数组每个

        循环n-1个 找到最大的记录下标志,最后与i做交换然后i++

二 、 额外空间复杂度(流程决定)

例1 一个数组 算总和 需要一个变量 来记录sum值

什么是额外空间?

数组开辟的空间,是原始数据,不算额外空间。

需要计算结果而开辟的空间,而不是原始数据,这样开辟的空间是额外空间。

例2   一个数组 算每个数出现次数 需要一个map来记录

什么是额外空间复杂度

例1的额外空间复杂度是O(1) 因为他不会随着初始数据变化而增长

例2 的额外空间复杂度是O(N)因为他会随着初始数据变化而增长

总结:算法入输出的空间都不是额外空间!

三、 常数项的时间

比较常数操作 多少

例如 插入排序 1234567 是O(n)

例如 冒泡 1234567 是O(n^2)

这里插入比冒泡少了比较和交换的常数项操作

比较常数操作 优劣

 排序算法 交换操作  一个是用 + - 进行 一个是用 ^ 进行

常数操作^ 比 + - 快 因为是位运算

如何PK常数项时间?

直接测试

四 、PK算法哪个最优

1 先满足时间复杂度最优

2 再满足空间复杂度最优

3 常数项因素 不算做PK最优(跟算法思想没关系,是细节方面)

五、排名从好到差:

O(1)  

O(logN)  

O(N)  

O(N*logN)  

O(N^2)   O(N^3)   …   O(N^K)

O(2^N)   O(3^N)   …   O(K^N)

O(N!)

这篇关于评估算法的优劣指标-时间复杂度-空间复杂度-常数操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/971229

相关文章

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

Python操作PDF文档的主流库使用指南

《Python操作PDF文档的主流库使用指南》PDF因其跨平台、格式固定的特性成为文档交换的标准,然而,由于其复杂的内部结构,程序化操作PDF一直是个挑战,本文主要为大家整理了Python操作PD... 目录一、 基础操作1.PyPDF2 (及其继任者 pypdf)2.PyMuPDF / fitz3.Fre

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

MySQL 强制使用特定索引的操作

《MySQL强制使用特定索引的操作》MySQL可通过FORCEINDEX、USEINDEX等语法强制查询使用特定索引,但优化器可能不采纳,需结合EXPLAIN分析执行计划,避免性能下降,注意版本差异... 目录1. 使用FORCE INDEX语法2. 使用USE INDEX语法3. 使用IGNORE IND

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库

Python使用openpyxl读取Excel的操作详解

《Python使用openpyxl读取Excel的操作详解》本文介绍了使用Python的openpyxl库进行Excel文件的创建、读写、数据操作、工作簿与工作表管理,包括创建工作簿、加载工作簿、操作... 目录1 概述1.1 图示1.2 安装第三方库2 工作簿 workbook2.1 创建:Workboo

Ubuntu 24.04启用root图形登录的操作流程

《Ubuntu24.04启用root图形登录的操作流程》Ubuntu默认禁用root账户的图形与SSH登录,这是为了安全,但在某些场景你可能需要直接用root登录GNOME桌面,本文以Ubuntu2... 目录一、前言二、准备工作三、设置 root 密码四、启用图形界面 root 登录1. 修改 GDM 配

JSONArray在Java中的应用操作实例

《JSONArray在Java中的应用操作实例》JSONArray是org.json库用于处理JSON数组的类,可将Java对象(Map/List)转换为JSON格式,提供增删改查等操作,适用于前后端... 目录1. jsONArray定义与功能1.1 JSONArray概念阐释1.1.1 什么是JSONA

Ubuntu如何分配​​未使用的空间

《Ubuntu如何分配​​未使用的空间》Ubuntu磁盘空间不足,实际未分配空间8.2G因LVM卷组名称格式差异(双破折号误写)导致无法扩展,确认正确卷组名后,使用lvextend和resize2fs... 目录1:原因2:操作3:报错5:解决问题:确认卷组名称​6:再次操作7:验证扩展是否成功8:问题已解