软考中级软件设计师——数据结构与算法基础学习笔记
软考中级软件设计师——数据结构与算法基本概念
- 什么是数据
- 数据元素、数据项
- 数据结构
- 逻辑结构
- 物理结构(存储结构)
- 算法
- 什么是算法
- 五个特性
- 算法效率的度量
- 时间复杂度
- 空间复杂度
什么是数据
数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。
数据元素、数据项
数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。一个数据元素可由若干数据项组成,数据项是构成数据元素的不可分割的最小单位。

以一个人的成绩单为例,整体成绩单为一个数据元素,而单科成绩是这个数据元素的数据项。
数据结构
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。

逻辑结构

集合:各个元素同属一个集合,别无其他关系

线性结构:数据元素之间是一对一的关系。除了第一个元素,所有元素都有唯一前驱;除了最后一个元素,所有元素都有唯一后继。

树形结构:数据元素之间是一对多的关系

图结构:数据元素之间是多对多的关系

物理结构(存储结构)

链式存储指逻辑上相邻的元素在物理位置上可以不相邻,也就是说是有相邻和不相邻两种情况的
算法

什么是算法
从字面意思上来说,就是用于计算的方法,通过这种方法可以达到预期的计算结果。从专业上来说,算法是一套模型分析的一组可行的,确定的,有穷的规则。简而言之,算法就是一系列的计算步骤,用来将输入数据转化为输出结果。
五个特性
- 有穷性:一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。
- 确定性:算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出
- 可行性:算法描述中操作都可以通过已经实现的基本运算执行有限次来实现
- 输入:一个算法有0个或多个输入,这些输入取自于某个特定的对象的集合
- 输出:一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量
算法效率的度量

时间复杂度和空间复杂度通常用大O表示法。
大O表示法:使用O(f(n))来表示时间复杂度,其中n是输入规模(例如数组的长度、图的节点数等),f(n)是一个关于n的函数。大O表示法关注的是随着n的增长,f(n)的增长趋势,即忽略掉常数项和低阶项。
时间复杂度
常见的时间复杂度类型及计算示例
①常数时间复杂度 O (1)
当算法的执行时间不依赖于输入规模时,时间复杂度为 O (1)。例如,访问数组中的一个特定元素:在大多数编程语言中,假设存在一个数组arr,访问arr[3](这里 3 是一个固定的索引),无论数组arr的长度是多少,这个操作都只需要一次查找就能完成。
②线性时间复杂度 O (n)
如果算法的执行时间与输入规模 n 成线性关系,那么时间复杂度为 O (n)。例如,遍历一个数组
int arr[5] = {1,2,3,4,5};for(int i = 0;i < 5;i ++){cout << arr[i] << ' ';}
这里,数组arr的长度为 n(在这个例子中 n = 5),循环会执行 n 次,随着数组长度 n 的增加,操作次数也会线性增加。
③平方时间复杂度 O (n²)
当存在嵌套循环,且内外层循环都与输入规模 n 有关时,通常会得到 O (n²) 的时间复杂度。例如,一个简单的冒泡排序算法:
vector<int> arr = {5, 4, 3, 2, 1}; int n = arr.size(); // 冒泡排序 for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j + 1]) { // 交换元素 int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } }
④对数时间复杂度 O (log n)
当算法每次迭代都将问题规模减半(或者按照某个比例缩小)时,时间复杂度通常为 O (log n)。例如,二分查找算法。在每次循环中,搜索范围都会减半,所以时间复杂度是 O (log n),这里 n 是数组的长度。
⑤线性对数时间复杂度 O (n log n)
这是一种常见于分治算法(如快速排序和归并排序的平均情况)的时间复杂度。例如,归并排序算法:
归并排序将数组不断地分成两半,对每一半进行排序(这部分的时间复杂度是 O (log n),因为每次划分都是将规模减半),然后合并这些子数组(合并操作的时间复杂度是 O (n),因为需要遍历所有元素来合并)。总体时间复杂度就是 O (n log n)。
空间复杂度
常见的空间复杂度类型
①常数空间复杂度 O (1)
当算法运行过程中所占用的额外空间不随输入规模的变化而变化时,空间复杂度为 O (1)。例如,交换两个变量的值。
②线性空间复杂度 O (n)
如果算法运行时所需的额外空间与输入规模 n 成线性关系,那么空间复杂度为 O (n)。例如,创建一个长度为 n 的数组,创建的数组的大小取决于输入规模 n,随着 n 的增加,所需的额外空间也会线性增加。
③平方空间复杂度 O (n²)
当算法需要创建一个二维数组,且二维数组的行和列都与输入规模 n 有关时,通常会得到 O (n²) 的空间复杂度。例如,创建一个 n×n 的二维矩阵。创建的二维矩阵包含 n * n 个元素,随着 n 的增加,所需的额外空间会以 n² 的量级增加。
④对数空间复杂度 O (log n)
在一些递归算法中,如果递归的深度与输入规模 n 的对数成正比,那么空间复杂度为 O (log n)。例如,计算一个数 n 的二进制表示中的最高位 1 的位置(可以通过不断将 n 除以 2 来实现)

空间复杂度 = 递归调用的深度
相关文章:
软考中级软件设计师——数据结构与算法基础学习笔记
软考中级软件设计师——数据结构与算法基本概念 什么是数据数据元素、数据项数据结构逻辑结构物理结构(存储结构) 算法什么是算法五个特性算法效率的度量时间复杂度空间复杂度 什么是数据 数据是信息的载体,是描述客观事物属性的数、字符及所…...
虚幻引擎 | (类恐鬼症)玩家和NPC语音聊天(中)
虚幻引擎 | (类恐鬼症)玩家和NPC语音聊天-CSDN博客 上篇偏重实现步骤,中篇偏重理解校准和降低延迟,下篇加入上下文背景array和设置口音 TTS通用参数 ————————————————————————————————————…...
整流电路的有源逆变工作状态
目录 1. 逆变的概念 2. 有源逆变的条件 3. 电流电路的概念 4. 产生逆变的条件 5. 三相桥式全控整流电路的有源逆变工作状态 6. 逆变角的概念 7. 逆变失败的原因 8. 最小逆变角的限制 整流电路的有源逆变状态是指通过控制整流器,使其将直流电源的能量反向送回…...
Android 签名、空包签名 、jarsigner、apksigner
jarsigner是JDK提供的针对jar包签名的通用工具, 位于JDK/bin/jarsigner.exe apksigner是Google官方提供的针对Android apk签名及验证的专用工具, 位于Android SDK/build-tools/SDK版本/apksigner.bat jarsigner: jarsigner签名空包执行的命令: jar…...
java基础(小技巧)
文章目录 一、日志输出二、字符串拼接三、日期比较四、常用注解五、Lombok的原理 提示:以下是本篇文章正文内容,下面案例可供参考 一、日志输出 之前使用的方式。在要使用的类里面定义日志类: private static Logger logger LoggerFactory…...
Android Studio 安装配置教程(Windows最详细版)
目录 前言 Android Studio 下载 Android Studio 安装 Android Studio 使用 一、创建默认项目(Compose) 二、创建常规项目 三、使用ViewBinding 四、查看Gradle版本、SDK版本、JDK版本 ① Gradle版本 ② SDK版本 ③ JDK版本 前言 Android开发…...
Cesium绘制可编辑线
Cesium 第一章 绘制可编辑线 Screen-2024-09-17-202059的副本 文章目录 Cesium一、绘制线二、编辑线三、使用 一、绘制线 1、方法 //场景相机控制viewer.scene.screenSpaceCameraController.enableRotate false; //cesium相机控制 绘制和编辑时 禁止转动场景// 鼠标样式修改…...
【算法】差分思想:强大的算法技巧
📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…...
微软开源项目 Detours 详细介绍与使用实例分享
目录 1、Detours概述 2、Detours功能特性 3、Detours工作原理 4、Detours应用场景 5、Detours兼容性 6、Detours具体使用方法 7、Detours使用实例 - 使用Detours拦截系统库中的UnhandledExceptionFilter接口,实现对程序异常的拦截 C++软件异常排查从入门到精通系列教程…...
Numba基础
1. Numba 基础 1.1 什么是 Numba? Numba 是一个 JIT 编译器,用于加速数值计算。它通过即时编译技术,将 Python 代码在运行时编译为机器代码,极大地提升执行速度,特别适合循环和矩阵操作等密集型计算。 2. Numba 基本…...
[JAVA]介绍怎样在Java中通过字节字符流实现文件读取与写入
一,初识File类及其常用方法 File类是java.io包下代表与平台无关的文件和目录,程序中操作文件和目录,都可以通过File类来完成。 通过这个File对象,可以进行一系列与文件相关的操作,比如判断文件是否存在,获…...
oracle停止当前运行的JOB或kill会话
在Oracle中,可以使用DBA_SCHEDULER_JOBS视图来查找当前正在运行的作业(job),并使用DBMS_SCHEDULER.STOP_JOB过程来停止它们 SELECT JOB_NAME, STATE FROM DBA_SCHEDULER_JOBS WHERE STATE RUNNING; SELECT * FROM DBA_SCHEDULE…...
SpringBoot 消息队列RabbitMQ 消息可靠性 数据持久化 与 LazyQueue
介绍 在默认情况下,RabbitMQ会将接收到的信息保存在内存中以降低消息收发的延迟 一旦MO宕机,内存中的消息会丢失内存空间有限,当消费者故障或处理过慢时,会导致消息积压,引发MQ阻塞 在消息队列运行的过程中…...
CLIP论文中关键信息记录
由于clip论文过长,一直无法完整的阅读该论文,故而抽取论文中的关键信息进行记录。主要记录clip是如何实现的的(提出背景、训练数据、设计模式、训练超参数、prompt的作用),clip的能力(clip的模型版本、clip…...
sshj使用代理连接服务器
之前我是用jsch连接服务器的,但是没办法使用私钥连接,搜了一下似乎是不支持新版的SSH-rsa,并且jsch很久没更新了,java - "com.jcraft.jsch.JSchException: Auth fail" with working passwords - Stack Overflow 没办法…...
【Leetcode:1184. 公交站间的距离 + 模拟】
🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…...
VRRP 笔记
一、概念: vrrp:Virtual Router Redundancy Protocol 虚拟路由冗余协议,当网关发生故障时,进行主备切换,保证业务连续性 把多台物理机的网关虚拟成一台Virtual Router,称为 VRID VIP:虚拟IP VM…...
【洛谷】P3743 小鸟的设备 的题解
【洛谷】P3743 小鸟的设备 的题解 题目传送门 题解 水一道二分 qaq 刚开始考虑的是动态规划,但是动态规划并不能维护题目所要求的东西。所以我们将思路转向另一种求最值问题的方法:二分答案。 首先,如果一个设备在 t t t 的时间内消耗的…...
算法面经手撕系列(2)--手撕BatchNormlization
BatchNormlization BatchNormlization的编码流程: init阶段初始化 C i n C_in Cin大小的scale向量和shift向量,同时初始化相同大小的滑动均值向量和滑动标准差向量;forward时沿着非channel维度计算均值、有偏方差依据得到均值和有偏方差进…...
mysql-搭建主从复制
文章目录 1、准备主服务器2、准备从服务器3、主库配置3.1、创建MySQL主服务器配置文件: 4、从库配置5、搭建主从&测试5.1、使用命令行登录MySQL主服务器5.2、主机中查询master状态:5.3、从机中查询slave状态:5.4、主机中创建slave用户&am…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
HTTPS证书一年多少钱?
HTTPS证书作为保障网站数据传输安全的重要工具,成为众多网站运营者的必备选择。然而,面对市场上种类繁多的HTTPS证书,其一年费用究竟是多少,又受哪些因素影响呢? 首先,HTTPS证书通常在PinTrust这样的专业平…...
零基础在实践中学习网络安全-皮卡丘靶场(第十一期-目录遍历模块)
经过前面几期的内容我们学习了很多网络安全的知识,而这期内容就涉及到了前面的第六期-RCE模块,第七期-File inclusion模块,第八期-Unsafe Filedownload模块。 什么是"遍历"呢:对学过一些开发语言的朋友来说应该知道&…...
从0开始学习R语言--Day17--Cox回归
Cox回归 在用医疗数据作分析时,最常见的是去预测某类病的患者的死亡率或预测他们的结局。但是我们得到的病人数据,往往会有很多的协变量,即使我们通过计算来减少指标对结果的影响,我们的数据中依然会有很多的协变量,且…...
