软考中级软件设计师——数据结构与算法基础学习笔记

软考中级软件设计师——数据结构与算法基本概念

    • 什么是数据
    • 数据元素、数据项
    • 数据结构
      • 逻辑结构
      • 物理结构(存储结构)
    • 算法
      • 什么是算法
      • 五个特性
      • 算法效率的度量
        • 时间复杂度
        • 空间复杂度

什么是数据

数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。

数据元素、数据项

数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。一个数据元素可由若干数据项组成,数据项是构成数据元素的不可分割的最小单位
在这里插入图片描述

以一个人的成绩单为例,整体成绩单为一个数据元素,而单科成绩是这个数据元素的数据项。

数据结构

数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
在这里插入图片描述

逻辑结构

在这里插入图片描述
集合:各个元素同属一个集合,别无其他关系
在这里插入图片描述

线性结构:数据元素之间是一对一的关系。除了第一个元素,所有元素都有唯一前驱;除了最后一个元素,所有元素都有唯一后继。
在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

物理结构(存储结构)

在这里插入图片描述
链式存储指逻辑上相邻的元素在物理位置上可以不相邻,也就是说是有相邻和不相邻两种情况的

算法

在这里插入图片描述

什么是算法

从字面意思上来说,就是用于计算的方法,通过这种方法可以达到预期的计算结果。从专业上来说,算法是一套模型分析的一组可行的,确定的,有穷的规则。简而言之,算法就是一系列的计算步骤,用来将输入数据转化为输出结果。

五个特性

  • 有穷性:一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。
  • 确定性:算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出
  • 可行性:算法描述中操作都可以通过已经实现的基本运算执行有限次来实现
  • 输入:一个算法有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 来实现)

在这里插入图片描述

空间复杂度 = 递归调用的深度

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

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

相关文章

【算法】队列与BFS

【ps】本篇有 4 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1&#xff09;N 叉树的层序遍历 .1- 题目解析 .2- 代码编写 2&#xff09;二叉树的锯齿形层序遍历 .1- 题目解析 .2- 代码编写 3&#xff09;二叉树最大宽度 .1- 题目解析 .2- 代码编写 4&#xf…

自养号测评:如何在敦煌网打造爆款与提升店铺权重

敦煌网自养号测评是敦煌网卖家为了提升店铺权重、流量及销量而采取的一种策略。自养号测评指的是卖家自行注册并管理买家账号&#xff0c;通过模拟真实买家行为&#xff0c;为自家店铺进行测评、补单等操作。以下是对敦煌网自养号测评的详细解析&#xff1a; 一、自养号测评的…

Text-to-SQL技术升级 - 阿里云OpenSearch-SQL在BIRD榜单夺冠方法

Text-to-SQL技术升级 - 阿里云OpenSearch-SQL在BIRD榜单夺冠方法 Text-to-SQL 任务旨在将自然语言查询转换为结构化查询语言(SQL),从而使非专业用户能够便捷地访问和操作数据库。近期,阿里云的 OpenSearch 引擎凭借其一致性对齐技术,在当前极具影响力的 Text-to-SQL 任务…

3.接口测试的基础/接口关联(Jmeter工具/场景一:我一个人负责所有的接口,项目规模不大)

一、Jmeter接口测试实战 1.场景一&#xff1a;我一个人负责所有的接口&#xff1a;项目规模不大 http:80 https:443 接口文档一般是开发给的&#xff0c;如果没有那就需要抓包。 请求默认值&#xff1a; 2.请求&#xff1a; 请求方式:get,post 请求路径 请求参数 查询字符串参数…

马匹行为识别系统源码分享

马匹行为识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

【自动驾驶】决策规划算法 | 数学基础(三)直角坐标与自然坐标转换Ⅱ

写在前面&#xff1a; &#x1f31f; 欢迎光临 清流君 的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落。&#x1f4dd; 个人主页&#xff1a;清流君_CSDN博客&#xff0c;期待与您一同探索 移动机器人 领域的无限可能。 &#x1f50d; 本文系 清流君 原创之作&…

UE5源码Windows编译、运行

官方文档 Welcome To Unreal Engine 5 Early Access Learn what to expect from the UE5 Early Access program. 链接如下&#xff1a;https://docs.unrealengine.com/5.0/en-US/Welcome/#gettingue5earlyaccessfromgithub Step 0&#xff1a;找到UE5源码 直接先上链接 https…

5.内容创作的未来:ChatGPT如何辅助写作(5/10)

引言 在信息爆炸的时代&#xff0c;内容创作已成为连接品牌与受众、传递信息与知识、以及塑造文化与观念的重要手段。随着数字媒体的兴起&#xff0c;内容创作的需求日益增长&#xff0c;对创作者的写作速度和质量提出了更高的要求。人工智能&#xff08;AI&#xff09;技术的…

旧衣回收小程序:开启旧衣回收新体验

随着社会的大众对环保的关注度越来越高&#xff0c;旧衣物回收市场迎来了快速发展时期。在数字化发展当下&#xff0c;旧衣回收行业也迎来了新的模式----互联网旧衣回收小程序&#xff0c;旨在为大众提供更加便捷、简单、透明的旧衣物回收方式&#xff0c;通过手机直接下单&…

在线包装盒型生成工具,各种异型包装盒型,PDF导出方便

1、templatemaker.nl Passepartout ✂ Templatemaker ︎https://www.templatemaker.nl/en/passepartout/这是一个荷兰设计师建的一个在线盒型自动生成工具&#xff0c;包含各类新奇盒型&#xff0c;大家可以一起去观摩一下。 网站首页顶部各种盒型展示&#xff0c;大家根据需…

开源|一个很强大的离线IP地址定位库和IP定位数据管理框架,支持亿级别的数据段

开源|一个很强大的离线IP地址定位库和IP定位数据管理框架&#xff0c;支持亿级别的数据段 不太会写-9527 卓越云阶 2024年09月18日 12:35 贵州 随着互联网技术的飞速发展&#xff0c;IP地址定位已成为许多应用程序中不可或缺的一部分。然而&#xff0c;现有的许多定位库在处理…

刻意练习:舒尔特方格提升专注力

1.功能描述 刻意练习&#xff1a;舒尔特方格提升专注力 如果发现自己存在不够专注的问题&#xff0c;可以通过一个小游戏来提升自己专注力--舒尔特方格。 舒尔特方格的实施步骤如下&#xff1a; 一张纸上画出5X5的空方格。在方格中&#xff0c;没有任何规律的随机填写数字1…

LeetCode_sql_day24(1212.查询球队积分)

描述 表: Teams ------------------------- | Column Name | Type | ------------------------- | team_id | int | | team_name | varchar | ------------------------- team_id 是该表具有唯一值的列。 表中的每一行都代表一支独立足球队。表: Matches…

VSCode扩展连接虚拟机MySQL数据库

在虚拟机安装MySQL vscode通过ssh远程登录Ubuntu 在vscode终端运行以下命令。 sudo apt-get install mysql-server-5.7 用以下命令确认MySQL是否安装完成。 sudo mysql MySQL安装成功。 在VSCode安装SQL扩展 扩展名&#xff1a;MySQL Shell for VS Code。 安装完成后&am…

我的AI工具箱Tauri版-VideoMusicCheckpointLouver音乐卡点百叶窗视频制作

本教程基于自研的AI工具箱Tauri版进行VideoMusicCheckpointLouver音乐卡点百叶窗视频制作。 视频样片《队长小翼》《沖田浩之-燃えてヒーロー》百叶窗卡点视频 《队长小翼》《沖田浩之-燃えてヒーロー》百叶窗卡点视频 该模块没有任何消耗。需要提前准备好响应的素材 该模块没…

ESP8266做httpServer提示Header fields are too long for server to interpret

CONFIG_HTTP_BUF_SIZE512 CONFIG_HTTPD_MAX_REQ_HDR_LEN1024 CONFIG_HTTPD_MAX_URI_LEN512CONFIG_HTTPD_MAX_REQ_HDR_LEN由512改为1024

Idea 中的一些配置

配置 javap jdk 自带的 javap 可以用来查看字节码信息。 配置过程&#xff1a; 打开设置&#xff0c;定位到 Tools&#xff0c;External Tools新建项&#xff0c;Program 中填 javap 的路径Argument 中填 -c $FileClass$Working directory 中填 $OutputPath$ Argument 中也…

2024/9/17 pytorch-卷积神经网络

一、torch.nn pytorch有很多接口&#xff0c;其中的torch.nn可以让我们方便的调用以便生成神经网络各层 1.torch.nn.Module 是一个构成神经网络层的一个基本类别&#xff0c;一般生成一个类别来继承nn.module torch.tensor(a)将a初始化为一个tensor类型数据 一般这种已经固…

Android 内置应用裁剪

文章目录 查询目标 APK 的 Android.mk&#xff08;或 Android.bp&#xff09;文件apk裁剪方式1.注释或删除.mk/.bp文件2.将 APK 名称加入“OVERRIDES”配置项中3.自定义“PRODUCT_PACKAGES_REMOVE”配置项 查询目标 APK 的 Android.mk&#xff08;或 Android.bp&#xff09;文件…

一、Numpy使用

1、numpy的简单使用 import numpy as np #利用as给numpy起一个别名np# 使用array来承接这个数组 array np.array([[1,2,3],[2,3,4]])print(array) print("number of dim:", array.ndim) # ndim 数组维度 print("shape:", array.shape) # 数组的形…