目录

一、算法

1.基本概念

2.描述方法

3.算法效率

二、算法的时间复杂度

三、算法的空间复杂度


一、算法

1.基本概念

通俗的讲,算法是解决问题的方法,比如在现实生活中一道菜谱,一个安装轮椅的操作指南等。

严格的说,算法是对特定问题求解步骤的一种描述,是指令的有限序列。

算法具有的基本特性有:

(1)有穷性。一个算法必须总是在执行有穷步之后结束,且每一步都在有求时间内完成。

(2)确定性。算法中的每一条指令必须有确切的含义,不存在二意性。

(3)可行性。这个算法是可执行的。并且算法的每一条指令都可以被分解为基本的可执行的操作步骤。

一个“好”算法还具有正确性,健壮性,可理解性,抽象分级,高效性等特性。

2.描述方法

算法的描述方法可以将所设计算法中设计的求解步骤记录下来。常用的描述算法的方法有自然语言、流程图、程序设计语言和伪代码等。

3.算法效率

如何衡量一个算法的效率?

        每当算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度

时间复杂度 主要衡量一个算法的运行快慢。

空间复杂度 主要衡量一个算法运行所需要的额外空间。

二、算法的时间复杂度

        撇开与计算机应硬软件有关的因素,影响算法时间代价的最主要因素是问题规模。所以运行算法所需要的时间T就是问题规模n的函数,记作 T(n)。它定量描述了该算法的运行时间

        一 个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。但是我们需要每个算法都上机测试吗?是可以都上机测试,但是这很麻烦,所以才有了时间复杂度这个分析方式。

        为了客观的反映一个算法的执行时间。可以用算法中基本语句的执行次数来度量算法的工作量(基本语句是执行次数与整个算法执行次数成正比的语句)。

        只考察当问题规模充分大时。算法中基本语句的执行次数在渐进意义下的阶称作算法的渐进时间复杂度。简称为时间复杂度

        简而言之,一个算法所花费的时间与其中基本语句的执行次数成正比例,算法中的基本操作语句的执行次数,为算法的时间复杂度。到某条基本语句与问题规模n之间的数学表达式,就算出了该算法的时间复杂度。

        但是,有时我们在计算基本语句的执行次数时,可能会发现有些次数计算时非常麻烦。所以实际中我们计算时间复杂度时,我们其实并不一定要计算精确的执行次数,而只需要大概执行次数,那么就需要使用大O的渐进表示法

大O的渐进表示法:

大O符号(Big O notation):是用于描述函数渐进行为的数学符号。  

推导大O阶方法:  

1、用常数1取代运行时间中的所有加法常数。

2、在修改后的运行次数函数中,只保留最高阶项。

3、如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶。

举例:计算时间复杂度

void Func(int N)
{int count = 0;for (int k = 0; k < 2 * N; ++k){++count;}int M = 10;while (M--){++count;}printf("%d\n", count);
}

这里的问题规模是N,基本语句为++count,基本操作次数为F(N)=2N+10,那么有大O的渐进表示法就为O(n)。

常见的时间复杂度有:

三、算法的空间复杂度

        空间复杂度也是一个数学表达式,是对一个算法在运行过程临时占用存储空间大小的量度

        空间复杂度不是算程序占用了多少字节的空间,而算的是变量的个数。 空间复杂度计算规则基本跟实践复杂度类似,也使用大O的渐进表示法

算法在运行过程中所需的存储空间包括:

①输入输出数据占用的空间;②算法本身占用的空间;③执行算法需要的辅助空间。

其中,输人输出数据占用的空间取决于问题,与算法无关;算法本身占用的空间虽然与算法相关,但一般其大小是固定的。所以,算法的空间复杂度是指算法在执行过程中需要的辅助空间数量,也就是除算法本身和输人输出数据所占用的空间外,算法临时开辟的存储空间

        函数运行时所需要的栈空间(存储参数、局部变量、一些寄存器信息等)在编译期间已经确定好了,因此空间复杂度主要通过函数在运行时候申请的额外空间来确定。

举例1:计算空间复杂度

void Bubble_sort(int arr[], int sz)
{int i = 0;for (i = 0; i < sz - 1; i++){int flag = 0;int j = 0;for (j = 0; j < sz - 1 - i; j++){//从小到大排序if (arr[j] > arr[j + 1]){int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;flag = 1;}}if (flag == 0){break;}}
}

这段代码中所有变量均为预先确定数量的局部变量:  int i、int flag、int j、int temp(总计4个整型变量)所以空间复杂度是O(1)。

举例2:计算空间复杂度

long long* Fibonacci(size_t n)
{if (n == 0){return NULL;}long long* fibArray = (long long*)malloc((n + 1) * sizeof(long long));fibArray[0] = 0;fibArray[1] = 1;for (int i = 2; i <= n; ++i){fibArray[i] = fibArray[i - 1] + fibArray[i - 2];}return fibArray;
}

由于这里动态开辟了n+1个额外空间,舍去常数后,空间复杂度是O(n)

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

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

相关文章

推荐系统基础 --ShusenWang

学习b站up主的ShusenWang的推荐系统笔记 指标 任何系统/算法/模型都需要评估&#xff0c;对于推荐系统的指标有消费指标和北极星指标&#xff0c;消费指标是衡量用户对产品的使用情况&#xff0c;使用频率广度和深度&#xff0c;用于了解用户的使用习惯&#xff0c;北极星指标是…

linux wsl2 docker 镜像复用快速方法

GitHub项目中的devcontainer.json、Dockerfile构建了一个A项目的镜像环境&#xff0c;现在我有一个文件夹&#xff0c;文件夹中只有一个b.py文件&#xff0c;此时我希望使用A项目的环境&#xff0c;如何实现&#xff1f;注意&#xff1a; 建议使用下面的方法2 解决方案&#xf…

(生活比喻-图文并茂)http2.0和http3.0的队头阻塞,http2.0应用层解决,TCP层存在,3.0就是彻底解决,到底怎么理解区别???

说明一下&#xff1a; http属于应用层协议&#xff0c;TCP和udp属于传输层协议 文章目录阶段一&#xff1a;HTTP/1.1 的情况&#xff08;单车道收费站&#xff0c;一次过一辆&#xff09;阶段二&#xff1a;HTTP/2 的情况&#xff08;多车道收费站&#xff0c;但出口只有一条路…

ARM环境openEuler2203sp4上部署19c单机问题-持续更新

问题01、报错如下orcl:/home/oracledb15> export CV_ASSUME_DISTIDRHEL8 orcl:/home/oracledb15> $ORACLE_HOME/runInstaller -applyPSU /soft/37642901 Exception in thread "main" java.lang.UnsatisfiedLinkError: /u01/app/oracle/product/19.0.0/db_1/oui…

php成绩分析系统单科分数分布分析202507

提交二维数据表&#xff0c;识别成绩科目显示科目选择&#xff0c;选择科目后显示样本数,平均分,最高分,最低分,中位数,柱状图图表显示各分值人数分布&#xff0c;表格显示统计数据。 技术&#xff1a;html5css3ajaxphp 原生代码实现。 效果图&#xff1a; 下载&#xff1a; …

Redis Cluster 与 Sentinel 笔记

目录 Redis 集群&#xff08;Cluster&#xff09;概述 Cluster 的工作原理 Cluster 配置与部署 Cluster 常见问题与限制 Redis Sentinel&#xff08;哨兵&#xff09;机制概述 Sentinel 的工作机制 Sentinel 配置与部署 Sentinel vs Cluster 总结 Redis 集群&#xff…

LLM视觉领域存在模型视觉识别不准确、细粒度视觉任务能力不足等科学问题

LLM视觉领域存在模型视觉识别不准确、细粒度视觉任务能力不足等科学问题 除了前面提到的数据集,还有一些用于评估视觉推理等能力的经典数据集。目前关于LLM视觉领域经典提示词方面的名校或大公司论文较少,以下是相关科学问题、数据集及部分相关论文介绍: 科学问题 视觉推理…

Node.js worker_threads:并发 vs 并行

一、核心结论 Node.js 的 worker_threads 模块实现的是 并行计算 &#xff0c;而非传统意义上的“并发”。其通过操作系统级线程实现多核 CPU 的并行执行&#xff0c;同时保留 Node.js 单线程事件循环的并发模型。 二、关键概念解析 1. 并发&#xff08;Concurrency&#xff09…

gloo 多卡训练

我们遇到了分布式训练中的通信超时问题&#xff08;Connection closed by peer&#xff09;。根据错误信息&#xff0c;问题发生在梯度同步的屏障&#xff08;barrier&#xff09;操作时。以下是针对此问题的优化措施和代码修改&#xff1a; 优化措施&#xff1a; 增强通信稳…

【Docker】在银河麒麟ARM环境下离线安装docker

1、前言 采用离线安装的方式。 关于离线安装的方式官网有介绍&#xff0c;但是说的很简单&#xff0c;网址&#xff1a;Binaries | Docker Docs 官网介绍的有几种主流linux系统的安装方式&#xff0c;但是没有kylin的&#xff0c;所以在此记录一下。 在安装过程中也遇到了些…

AUTOSAR进阶图解==>AUTOSAR_SWS_SOMEIPTransformer

AUTOSAR SOME/IP 转换器规范详解 基于AUTOSAR标准的SOME/IP转换器协议解析与实现指南目录 1. 介绍与功能概述2. SOME/IP架构 2.1 SOME/IP转换器架构2.2 组件解释2.3 层级说明 3. SOME/IP通信流程 3.1 客户端/服务器通信序列3.2 通信流程解释 4. SOME/IP消息结构 4.1 消息结构类…

Python 机器学习核心入门与实战进阶 Day 5 - 模型调参与交叉验证技巧(GridSearchCV、KFold)

✅ 今日目标 理解模型调参的重要性&#xff08;避免欠拟合/过拟合&#xff09;掌握 GridSearchCV 的使用方法学习 K 折交叉验证的基本流程与意义对比不同参数组合的表现使用 Pipeline 简化流程&#xff08;进阶&#xff09;&#x1f4d8; 一、调参思路方法描述Grid Search穷举所…

Python打卡:Day47

复习日 浙大疏锦行

ACE-Step:AI音乐生成基础模型

ACE-Step是什么 ACE-Step 是 ACE Studio 和 StepFun 联合推出的一款开源音乐生成基础模型&#xff0c;专为高效、连贯、可控的音乐创作而设计。它融合了扩散模型、深度压缩自编码器&#xff08;DCAE&#xff09;和轻量级线性变换器&#xff0c;生成速度比传统大模型快约 15 倍…

Web前端: :is(通用选择器)

:is(通用选择器)CSS中的 :is() 选择器是⼀个功能强⼤的伪类选择器&#xff0c;它⽤于简化复杂的选择器&#xff0c;特别是在处理多个相似的选择器时。:is() 选择器接受 ⼀个选择器列表作为参数&#xff0c;然后匹配列表中任何⼀个选择器所选中的元素。:is() 选择器核心概念基本…

【学习笔记】网络设备(华为交换机)基础知识 24 —— 以太网子接口基础知识

**总结&#xff1a;分享华为交换机以太网子接口基础知识&#xff1a;包含子接口的简介、功能、分类以及二层以太网子接口配置终结子接口、三层以太网子接口配置终结子接口和检查配置结果的相关命令 ** 一、子接口的概念 1、子接口的简介以太网子接口&#xff1a;‌是通过协议和…

在Docker中安装nexus3(作为maven私服)

1. 为什么我不推荐安装nexus2&#xff1f; 有两个原因&#xff1a;&#xff08;1&#xff09;nexus2安装麻烦&#xff0c;nexus3安装更方便 &#xff08;2&#xff09;Nexus 3相对于Nexus 2进行了一些重要的改进和增强。它引入了新的存储引擎、更多的仓库类型支持、改进的权限…

一、MySQL 8.0 之《EXPLAIN ANALYZE 执行计划》

文章目录一、MySQL EXPLAIN ANALYZE 执行计划指南主要功能实际执行性能分析详细的执行统计性能瓶颈识别与普通 EXPLAIN 的区别使用场景查询优化问题诊断总结二、EXPLAIN ANALYZE 执行计划样例分析执行顺序解读逐行详细解释第 7 行 (最内层)第 6 行第 5 行第 4 行第 3 行第 2 行…

Google I/O Extended :2025 Flutter 的现状与未来

大家好&#xff0c;我是 Flutter GDE 郭树煜&#xff0c;Github GSY 项目的维护人&#xff0c;今天主要分享的内容是「Flutter 的现状与未来」&#xff0c;可能今天更多会是信息科普类型的内容&#xff0c;主要是分享关于 Flutter 的现状与未来 现状 其实 Flutter 从开源到现在…

软考(软件设计师)数据库原理:事务管理,备份恢复,并发控制

数据库事务管理与备份恢复 事务&#xff08;Transaction&#xff09; 是数据库管理系统中执行的一个不可分割的工作单元&#xff0c;它包含一组 SQL 操作&#xff0c;这些操作要么全部成功执行&#xff0c;要么全部不执行。 事务的四大特性&#xff08;ACID&#xff09;&…