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

目录

  • 前言
  • 时间复杂度

前言

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

时间复杂度

时间复杂度计算的不是时间,是程序的运行次数
计算时间复杂度的方法是大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;elsestr++;
}

这样时间复杂度就容易看出来了: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.hqwc.cn/news/675595.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CTF Web】攻防世界 GFSJ0478 cookie Writeup(HTTP协议+信息收集+Cookie)

cookie X老师告诉小宁他在cookie里放了些东西&#xff0c;小宁疑惑地想&#xff1a;‘这是夹心饼干的意思吗&#xff1f;’ 解法 按 F12&#xff0c;点击网络。 刷新页面。查看请求头中的 Cookie。 look-herecookie.php访问&#xff1a; http://61.147.171.105:53668/cookie.…

Linux——综合实验

要求 按照上面的架构部署一个简单的web节点所有的服务器使用DNS服务器作为自己的DNS服务器 就是/etc/reslov.conf 中nameserver的值必须是途中dns服务器的地址所有的数据库都是用mysql应用 nfs共享导出在客户端(web服务器上)使用autofs在自动挂载&#xff0c;或者写入/etc/fsta…

free5gc+ueransim配置

ueransim已完成配置&#xff0c;可以观察到在make后&#xff0c;ueransim的build下生成以下几个文件 nr-gnb-------------5G gnb&#xff08;RAN&#xff09;的主要可执行文件 nr ue---------------5G ue的主要可执行文件 nr-cli---------------5G gNB和UE的cli工具 nr-binder-…

基于Springboot的教学资源共享平台(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的教学资源共享平台&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

品深茶的抗癌功能是否涉及虚假宣传?

品深茶说到底&#xff0c;本质还是中国传统茶叶&#xff0c;茶叶本就是一种含有多种成分的饮品&#xff0c;包括茶多酚、生物碱、氨基酸、有机酸等。这些成分对人体有一定的益处&#xff0c;如抗氧化、抗炎、抗菌等作用。 一些研究表明&#xff0c;茶叶中的某些成分如茶多酚、…

46. UE5 RPG 实现角色死亡效果

在上一篇文章中&#xff0c;我们实现了敌人受到攻击后会播放受击动画&#xff0c;并且还给角色设置了受击标签。并在角色受击时&#xff0c;在角色身上挂上受击标签&#xff0c;在c里&#xff0c;如果挂载了此标签&#xff0c;速度将降为0 。 受击有了&#xff0c;接下来我们将…

从零开始的软件测试学习之旅(六)测试网络基础知识

测试网络基础知识 HTTP和HTMLURLDNS客户端和服务器请求方法和状态码面试高频Fiddler抓包工具教学弱网 HTTP和HTML 概念 html: HyperText Markup Language 超文本标记语言 http: HyperText Transfer Protocol 超文本传输协议 超文本: 图片, 音频, 视频 关系:http 可以对 html 的…

谷歌推出10门免费AI课程,无需教科书及费用

谷歌面向小白以及开发者分别推出了不同的AI课程~ 包含初级、中级和高级。课程章节大致包括&#xff1a;&#xff08;含教学视频、参考材料、测验&#xff09; 基础入门&#xff1a;45分钟深入了解生成式AI 简单实操&#xff1a;30分钟掌握大语言模型 了解如何释放生成式 AI S…

SparkSQL优化

SparkSQL优化 优化说明 缓存数据到内存 Spark SQL可以通过调用spark.sqlContext.cacheTable("tableName") 或者dataFrame.cache()&#xff0c;将表用一种柱状格式&#xff08; an inmemory columnar format&#xff09;缓存至内存中。然后Spark SQL在执行查询任务…

JAVA中的线程、死锁、异常

线程 Thread 一、程序 1&#xff0e;一段静态代码&#xff08;静态&#xff09; 二、进程 1&#xff0e;动态的&#xff0c;有开始&#xff0c;有结束&#xff1b;2&#xff0e;程序的一次执行过程&#xff0c;3&#xff0e;操作系统调度分配资源的最小单位&#xff1b; 三、…

TCN-BiGRU-Attention(12种算法优化TCN-BiGRU-Attention)(多输入单输出)

12种算法优化TCN-BiGRU-Attention模型预测的代码。其中Attention模型可以改为单头或者多头&#xff0c;在代码中就是改个数字而已。代码注释已写好如何更改。 TCN-BiGRU-Attention&#xff08;12种算法优化TCN-BiGRU-Attention&#xff09;&#xff08;多输入单输出)代码获取戳…

【C++】C++11--- 类的新功能

目录 类的新功能 默认成员函数 示例 类成员变量初始化 强制生成默认函数的关键字default 禁止生成默认函数的关键字delete 类的新功能 默认成员函数 构造函数析构函数拷贝构造函数拷贝赋值重载取地址重载const取地址重载 C11在原先的6个默认成员函数的基础上&#xff0c…