时间复杂度与空间复杂度(上篇)

目录

  • 前言
  • 时间复杂度

前言

算法在运行的过程中要消耗时间资源和空间资源
所以衡量一个算法的好坏要看空间复杂度时间复杂度
时间复杂度衡量一个算法的运行快慢
空间复杂度是一个算法运行所需要的额外的空间
一个算法中我们更关心的是时间复杂度

时间复杂度

时间复杂度计算的不是时间,是程序的运行次数
计算时间复杂度的方法是大O的渐进表示法
计算的是程序大概的运算次数
看影响最大的项,计算的都是N很大的情况
因为N很小CPU跑的很快,算法时间上没有差异

大O指的是函数渐进行为的数学符号

1.用常数1代表运算中所有加法常数 例如: O(1)代表常数次不是1次,100 --> O(1)

2.保留对结果影响最大的项,保留最高阶项

3.与最高阶相乘的系数如果是常数,就去除这个常数,保留最高阶的项

时间复杂度还有平均情况,最好情况,最坏情况找到
但我们关心的是最坏情况

例如:一个数组中搜查一个数据x,最坏的情况是找n次,找到最后一个数据才找到
在这里插入图片描述

例如:在这里插入图片描述下面举几个例子:

// 计算strchr的时间复杂度?
const char * strchr ( const char * str, int character );

strchr是在一个字符串中找一个字符
strchr的实现也比较简单
如果*str等于要找的字符就跳出来,否则++继续找

while(*str)
{
  if(*str == x)
  break;
  else
  str++;
}

这样时间复杂度就容易看出来了:O(n)

// 计算Func4的时间复杂度?
void Func4(int N)
{
int count = 0;
for (int k = 0; k < 100; ++ k)
{
++count;
}
printf("%d\n", count);
}

100次为常数次O(1)

// 计算Func3的时间复杂度?
void Func3(int N, int M)
{
int count = 0;
for (int k = 0; k < M; ++ k)
{
++count;
}
for (int k = 0; k < N ; ++ k)
{
++count;
}
printf("%d\n", count);
}

O(M+N) 或 O(max(M,N))
如果M远大于N,O(M)
如果N远大于M,O(N)

// 计算BubbleSort的时间复杂度?
void BubbleSort(int* a, int n)
{
assert(a);
for (size_t end = n; end > 0; --end)
{
int exchange = 0;
for (size_t i = 1; i < end; ++i)
{
if (a[i-1] > a[i])
{
Swap(&a[i-1], &a[i]);
exchange = 1;
}
}
if (exchange == 0)
break;
}
}

冒泡排序的时间复杂度:O(N^2)
N*(N-1) - >N^2

// 计算BinarySearch的时间复杂度?
int BinarySearch(int* a, int n, int x)
{
assert(a);
int begin = 0;
int end = n-1;
// [begin, end]:begin和end是左闭右闭区间,因此有=号
while (begin <= end)
{
int mid = begin + ((end-begin)>>1);
if (a[mid] < x)
begin = mid+1;
else if (a[mid] > x)
end = mid-1;
else
return mid;
}
return -1;
}

二分查找的时间复杂度:O(logN)
一直二分二分,二分到最后一个数据才找到(最坏情况)
在这里插入图片描述
在这里插入图片描述
二分查找又叫作区间查找
可以分为左闭右闭 [ ] , 左闭右开[ ) ,
左开右闭( ] ,左开右开(),下一篇博客详细介绍
在这里插入图片描述
二分查找的缺点:
外强中干,实际中不太使用
a.排序 (对数据进行移动)(例如快排,冒泡)
b.数组结构(不方便插入删除)
插入删除每次都要移动数据
后续我们学的二叉搜索树
红黑树,AVL树
B树系列适合求解这类问题

暴力查找:最朴素,最直接的方式求解
在N个数据中一个一个地找,最坏情况就找到最后一个数据
最后一个数据找到
或最后一个数据也找不到

在这里插入图片描述

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

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

相关文章

使用idea管理docker

写在前面 其实idea也提供了docker的管理功能&#xff0c;比如查看容器列表&#xff0c;启动容器&#xff0c;停止容器等&#xff0c;本文来看下如何管理本地的docker daemon和远程的dockers daemon。 1&#xff1a;管理本地 双击shift&#xff0c;录入service&#xff1a; …

24年审计师报名时间汇总所需材料提前准备

2024审计师报名本周开始&#xff08;5月10日起&#xff09;&#xff0c;各地报名时间不一&#xff0c;报名指南整理好了&#xff01; ✅全国报名时间汇总报名费用资格审核&#xff1a;P1~P2。 ✅2024年审计师考试科目&#xff1a; 《审计相关基础知识》和《审计理论与实务》 ✅…

如何创建微信小程序?只需3步完成小程序制作

微信&#xff0c;中国最大的社交媒体应用程序&#xff0c;几个月前推出了微信小程序&#xff0c;这一神奇的功能立即大受欢迎。这些小程序让在中国注册的商业实体所有者创建一个小程序来与微信用户互动。这些小程序不需要在用户手机上进行任何安装&#xff0c;只需通过微信应用…

HP Z620 服务器打开VTx虚拟技术

在使用Virtual Box的时候&#xff0c;虚拟主机启动报错&#xff1a;提示需要VTx。于是到bios里面去设置VTx。 这里有个小坑&#xff0c;就是HP 的bios配置里面&#xff0c;VTx不在常规的“System Configuration”、“Advanced”等地方&#xff0c;而是在“Security”菜单里&…

关于2024年上半年软考考试批次安排的通告

按照《2024年计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试工作安排及有关事项的通知》&#xff08;计考办〔2024〕1号&#xff09;文件精神&#xff0c;结合各地机位实际&#xff0c;现将2024年上半年计算机软件资格考试有关安排通告如下&#xff1a; 一、考…

【排序算法】之冒泡排序

一、算法介绍 冒泡排序&#xff08;Bubble Sort&#xff09;是一种基础的排序算法&#xff0c;它的主要思想是通过重复遍历待排序的列表&#xff0c;比较每对相邻的元素并根据需要交换它们&#xff0c;使得每一遍遍历都能将未排序的最大&#xff08;或最小&#xff09;元素“冒…

RH 414膜电位荧光探针,161433-30-3,具有出色的荧光性质和高度专业化的反应原理

一、试剂信息 名称&#xff1a;RH 414膜电位荧光探针CAS号&#xff1a;161433-30-3结构式&#xff1a; 二、试剂内容 RH 414膜电位荧光探针是一种基于荧光共振能量转移&#xff08;FRET&#xff09;技术的荧光染料&#xff0c;具有出色的荧光性质和高度专业化的反应原理。…

Cordova 12 Android 不支持 http 原因探索

最近在升级 Cordova 到最新版本&#xff0c;升级完成后发现无法请求网络&#xff0c;研究了两次最终发现解决方案。 发现控制台中有日志输出&#xff0c;提示当前是 https &#xff0c;无法直接访问 http。 [INFO:CONSOLE(225)] "Mixed Content: The page at https://lo…

如何更好地使用Kafka? - 运行监控篇

要确保Kafka在使用过程中的稳定性&#xff0c;需要从kafka在业务中的使用周期进行依次保障。主要可以分为&#xff1a;事先预防&#xff08;通过规范的使用、开发&#xff0c;预防问题产生&#xff09;、运行时监控&#xff08;保障集群稳定&#xff0c;出问题能及时发现&#…

tf2使用savemodel保存之后转化为onnx适合进行om模型部署

tf2使用savemodel保存之后转化为onnx适合进行om模型部署 tf保存为kears框架h5文件将h5转化为savemodel格式&#xff0c;方便部署查看模型架构将savemodel转化为onnx格式使用netrononnx模型细微处理代码转化为om以及推理代码&#xff0c;要么使用midstudio tf保存为kears框架h5文…

设计严谨,思路绝妙!这篇高级孟德尔随机化研究:药靶、共定位,发文一区(IF=8.9)!...

现在越来越多的学者在用孟德尔随机化高级方法发文&#xff0c;今天我们看的这篇这篇药靶孟德尔随机化&#xff0c;还用了共定位分析方法&#xff0c;亮点在于它的设计严谨&#xff0c;思路绝妙&#xff0c;一起看下去吧&#xff01; 2024年4月21日&#xff0c;四川大学华西医院…

机器人码垛机的主体结构及技术特点

在现代物流和生产线上&#xff0c;机器人码垛机以其高效、准确的特点&#xff0c;成为了不可或缺的重要设备。那么&#xff0c;这个神奇的机器人究竟由哪些部分组成?它的内部结构又有哪些奥秘呢?接下来&#xff0c;就让我们一起揭开它的神秘面纱! 一、机器人码垛机的主体结构…

每日OJ题_贪心算法三②_力扣553. 最优除法

目录 力扣553. 最优除法 解析代码 力扣553. 最优除法 553. 最优除法 难度 中等 给定一正整数数组 nums&#xff0c;nums 中的相邻整数将进行浮点除法。例如&#xff0c; [2,3,4] -> 2 / 3 / 4 。 例如&#xff0c;nums [2,3,4]&#xff0c;我们将求表达式的值 "…

【Leetcode每日一题】 穷举vs暴搜vs深搜vs回溯vs剪枝_全排列 - 子集(解法2)(难度⭐⭐)(72)

1. 题目解析 题目链接&#xff1a;78. 子集 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 为了生成一个给定数组 nums 的所有子集&#xff0c;我们可以利用一种称为回溯&#xff08;backtracking&#xff09;的算法…

美国纽扣电池UL4200A及16CFR1262标准亚马逊要求

2023年9月21日&#xff0c;美国消费品安全委员会CPSC(Consumer Product Safety Commission) 决定采用UL 4200A-2023&#xff08;包含纽扣电池或硬币电池的产品安全标准&#xff09;作为包含纽扣电池或硬币电池的消费品的强制性消费品安全规则&#xff0c;相关要求同时被编入到1…

C++中的异常处理方式

目录 一、异常 二、C语言中对错误的处理 三、C中的异常处理 四、异常的抛出和捕获 五、异常的重新抛出 六、C标准库中的异常体系 七、异常的规范 一、异常 在C中&#xff0c;异常是程序运行期间发生的意外或错误情况。这些情况可能会导致程序无法继续正常执行&#xff0c;…

STM32接入CH340芯片的初始化进入升级模式(死机)问题处理

目录 1. 问题描述2. 问题分析2.1 CH340G/K 的初始化波形2.2 第1种USB升级电路2.3 第2种USB升级电路2.4 第3种USB升级电路2.5 第4种USB升级电路 3. 总结 1. 问题描述 我所用的CH340G&#xff08;CH340K也用过&#xff09;接在MCU的电路中&#xff0c;在插入CH340G/K 的接插件&a…

基于点灯Blinker的ESP8266远程网络遥控LED

本文介绍基于ESP8266模块实现的远程点灯操作&#xff0c;手机侧APP选用的是点灯-Blinker&#xff0c;完整资料及软件见文末链接 一、ESP8266模块简介 ESP8266是智能家居等物联网场景下常用的数传模块&#xff0c;具有强大的功能&#xff0c;通过串口转WIFI的方式可实现远距离…

文献速递:深度学习医学影像心脏疾病检测与诊断--CT中的深度学习用于自动钙评分:使用多个心脏CT和胸部CT协议的验证

Title 题目 Deep Learning for Automatic Calcium Scoring in CT: Validation Using Multiple Cardiac CT and Chest CT Protocols CT中的深度学习用于自动钙评分&#xff1a;使用多个心脏CT和胸部CT协议的验证 Background 背景 Although several deep learning (DL) calc…

微软开发新模型;YouTube 推出新AI功能;可折叠iPhone 或发布?

微软或开发新模型与 Google、OpenAI 竞争 The Information 报道&#xff0c;微软正在训练一种新的 AI 大模型「MAI-1」&#xff0c;规模上足以与 Google、Anthropic 乃至 OpenAI 的先进模型抗衡。 据报道&#xff0c;这个 MAI-1 模型由微软聘请的 Inflection 前 CEO Mustafa S…
最新文章