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

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

相关文章

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测 目录 时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测基本介绍程序设计参考资料 基本介绍 MATLAB实现LSTM时间序列未来多步预测-递归预测。LSTM是一种含有LSTM区块(blocks)或其他的一种类神经网络,文献或其他资料中LSTM区块可能被描述成智能网络单元,因为

java中查看函数运行时间和cpu运行时间

android开发调查性能问题中有一个现象,函数的运行时间远低于cpu执行时间,因为函数运行期间线程可能包含等待操作。native层可以查看实际的cpu执行时间和函数执行时间。在java中如何实现? 借助AI得到了答案 import java.lang.management.ManagementFactory;import java.lang.management.Threa

代码随想录算法训练营:12/60

非科班学习算法day12 | LeetCode150:逆波兰表达式 ,Leetcode239: 滑动窗口最大值  目录 介绍 一、基础概念补充: 1.c++字符串转为数字 1. std::stoi, std::stol, std::stoll, std::stoul, std::stoull(最常用) 2. std::stringstream 3. std::atoi, std

人工智能机器学习算法总结神经网络算法(前向及反向传播)

1.定义,意义和优缺点 定义: 神经网络算法是一种模仿人类大脑神经元之间连接方式的机器学习算法。通过多层神经元的组合和激活函数的非线性转换,神经网络能够学习数据的特征和模式,实现对复杂数据的建模和预测。(我们可以借助人类的神经元模型来更好的帮助我们理解该算法的本质,不过这里需要说明的是,虽然名字是神经网络,并且结构等等也是借鉴了神经网络,但其原型以及算法本质上还和生物层面的神经网络运行原理存在

SQL Server中,always on服务器的相关操作

在SQL Server中,建立了always on服务,可用于数据库的同步备份,当数据库出现问题后,always on服务会自动切换主从服务器。 例如192.168.1.10为主服务器,12为从服务器,当主服务器出现问题后,always on自动将主服务器切换为12,保证数据库正常访问。 对于always on服务器有如下操作: 1、切换主从服务器:假如需要手动切换主从服务器时(如果两个服务

时间服务器中,适用于国内的 NTP 服务器地址,可用于时间同步或 Android 加速 GPS 定位

NTP 是什么?   NTP 是网络时间协议(Network Time Protocol),它用来同步网络设备【如计算机、手机】的时间的协议。 NTP 实现什么目的?   目的很简单,就是为了提供准确时间。因为我们的手表、设备等,经常会时间跑着跑着就有误差,或快或慢的少几秒,时间长了甚至误差过分钟。 NTP 服务器列表 最常见、熟知的就是 www.pool.ntp.org/zo

JavaWeb系列二十: jQuery的DOM操作 下

jQuery的DOM操作 CSS-DOM操作多选框案例页面加载完毕触发方法作业布置jQuery获取选中复选框的值jQuery控制checkbox被选中jQuery控制(全选/全不选/反选)jQuery动态添加删除用户 CSS-DOM操作 获取和设置元素的样式属性: css()获取和设置元素透明度: opacity属性获取和设置元素高度, 宽度: height(), widt

20170723 做的事 ecdsa的签名验证时间短于bls signature

1 今天在虚拟机 /home/smile/Desktop/20170610/Test//time_ecdsa 文件夹下,找到ecdsa的验证时间是 989.060606μs μs 先 make ,然后run。 再取BLS的签名生成时间: ./run  2  gnuplot 画图,画对比的时间 gnuplot 画图参考教程 http://blog.sciencen