数据结构1——概念与程序复杂度

news2024/11/13 10:22:50

翻陈年老底翻到了之前的数据结构笔记,由于当时刚开始使用电脑记笔记,markdown语法用的还是不是很熟,以及技术上比较欠缺,望多多海涵。

来都来了,点个赞呗~

数据结构大体框架

请添加图片描述

早期>>数值计算>>计算机元素间关系简单,计算复杂

如今>>非数值计算>>计算机元素间关系复杂,计算简单

非数值计算呈现形式:表、树、图······

基础概念介绍

1、**数据:**能输入计算机且能被计算机处理的各种符号的集合

​ **包括:**数值型数据:整数、实数等

​ 非数值型数据:文字、图像、图形、声音

2、**数据元素:**是数据的基本单位,在计算机中通常作为一个整体进行考虑和 处理,也简称为元素 、结点

3、数据项:构成数据元素的不可分割的最小单位

数据>数据元素>数据项

例如:学生信息表>学生>学号、姓名

4、**数据对象:**是性质相同的数据元素的集合,是数据的一个子集

对比:

数据元素是数据的个体

数据对象是数据的子集

数据结构概念

① 定义:

数据元素之间的相互关系成为结构;数据结构是带结构的数据元素的集合

② 内涵:

逻辑结构——数据元素间的逻辑关系

存储结构——数据元素以及关系在计算机内存中的表示

运算和实现——对数据元素可以施加的操作以及这些操作在相应的存储结构与上的实现

关系:逻辑结构是数据结构的抽象,存储结构式数据结构的实现

③ 逻辑结构的种类:

划分方式一:

线性结构

特点有且仅有一个开始和一个终端结点,并且所有节点都最多只有一个直接前驱和一个直接后驱**(就是一条路走到黑,一对一)**

例如:线性表、栈、队列、串

非线性结构

一个结点可能有多个直接前驱和直接后继**(一对多、多对多)**

例如:树、图


划分方式二:

**集合结构:**无关系

**线性结构:**一对一

**树形结构:**一对多

**图状结构:**多对多


④ 存储结构的种类
  • 顺序存储结构:

用一组连续的存储单元依次存储数据元素,C语言中使用数组来实现顺序存储结构

  • 链式存储结构:

用一组任意的存储单元存储数据元素,C语言中使用指针来实现链式存储结构

请添加图片描述

  • 索引存储结构:

在存储结点信息的同时,还建立附加的索引表

  • 散列存储结构:

根据结点的关键字直接计算出该结点的存储地址

数据类型和抽象数据类型:

数据类型(DT)定义:

是一组性质相同的值的集合以及定义于这个值集合上一组操作的总称

抽象数据类型(ADT)定义:

是一个数学模型以及定义再次数学模型上的一组操作

从问题抽象出数据模型并定义抽象运算

C语言数据类型:

基本数据类型:int,char,float,double等

构造数据类型:数组、结构、共用体、枚举等

其他数据类型:指针、空(void)

typedef自己定义数据类型

抽象数据类型的形式定义:

抽象数据类型可以用(D,S,P)三元组表示

D是数据对象;

S是D上的关系集;

P是对D的基本操作集

一个抽象数据类型的定义格式如下:

ADT 抽象数据类型名{

数据对象:<数据对象的定义>

数据关系:<数据关系的定义>

基本操作:<基本操作的定义>

}ADT 抽象数据类型名

数据对象、数据关系的定义用伪代码描述

基本操作的定义格式为:

下面的这部分可能会比较抽象,可以先从概念上理解每部分的作用即可,不必硬记格式

· 基本操作名(参数表)

​ 赋值参数 为操作提供输入值

​ 引用参数 用&开头,提供输入值+返回操作结果

· 初始条件:<初始条件描述>

​ 描述操作执行之前数据结构和参数应该满足的条件;若操作失败,返回相应出错信息;若初始条件为空,则省略

· 操作结果:<操作结果描述>

​ 说明操作正常完成之后,数据结构的变化状况和应返回的结果

例子:Circle定义

请添加图片描述

算法概念

1、定义:

对特定解决问题方法和步骤的一种描述

程序=数据结构+算法

**关系: **数据结构通过算法实现操作;算法根据数据结构设计程序

2、特性:

有穷性 执行有穷步,有穷时间内完成

确定性 指令有确切含义,无二义性,否则容易引起误解

可行性 可以执行,即点“运行”的时候不会发生异常而导致程序无法进行

输入 可以是0个

输出 必须要有输出

3、设计要求

· 正确性 尤其要关注边缘值、特殊值的输入数据能否满足

· 可读性 注意人能不能看懂

· 健壮性 输入非法数据时,算法要有恰当反应

· 高效性 花费尽量少的时间和尽量低的存储需求

4、评价

时间效率+空间效率

算法的时间效率和空间效率有时候是矛盾的

① 时间效率

1)衡量:消耗时间=执行一次简单操作时间×简单操作次数(语句频数)

简单操作时间主要由机器本身软硬件环境决定的,所以设计算法的过程中考虑语句频度即可

我们把算法所耗费的时间定义为该算法中每条语句的频度之和T(n)函数

2)渐进时间复杂度:
T ( n ) = O ( f ( n ) ) T(n)=O(f(n)) T(n)=O(f(n))

利用时间复杂度可以具体算出频度之和,但是,对于大程序而言往往这样做起来比较复杂,而且有些操作对复杂度贡献较小,于是我们可以利用等价无穷大的思想,计算渐进时间复杂度。不必考虑计算所有操作的执行次数,只考虑算法中基本操作的执行次数。并取最高次幂。

例题:分析以下程序段的时间复杂度:

请添加图片描述

尝试列举分析:

请添加图片描述

3)时间复杂度分类:

(1)最坏时间复杂度:最坏情况下,算法的时间复杂度

(2)平均时间复杂度:在所有可能输入示例在等概率出现的情况下,算法的期望运行时间

(3)最好时间复杂度:最好情况下,算法的时间复杂度

一般总考虑最坏情况下的时间复杂度,以保证算法运行的时间不会比它更长

对于复杂的算法,可以将其分为几个不同的部分,然后利用加法法则和乘法法则计算算法的时间复杂度

a) 加法法则:
T ( n ) = T 1 ( n ) + T 2 ( n ) = O ( f ( n ) ) + O ( g ( n ) ) = O ( m a x ( f ( n ) , g ( n ) ) ) T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n))) T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n)))
b) 乘法法则:
T ( n ) = T 1 ( n ) ∗ T 2 ( n ) = O ( f ( n ) ) ∗ O ( g ( n ) ) = O ( f ( n ) ∗ g ( n ) ) T(n)=T1(n)*T2(n)=O(f(n))*O(g(n))=O(f(n)*g(n)) T(n)=T1(n)T2(n)=O(f(n))O(g(n))=O(f(n)g(n))
4)几种常见时间复杂度比较

常数阶<对数阶<线性阶<线性对数阶<平方阶<立方阶<······<k次方阶<指数阶

② 空间效率

渐进空间复杂度:
S ( n ) = O ( f ( n ) ) S(n)=O(f(n)) S(n)=O(f(n))

总结:

抽象数据类型=数据的逻辑结构+抽象运算
数据的逻辑结构
数据的存储结构1
数据的存储结构2
数据的存储结构n
算法11
算法12
算法1m
算法n1
算法n2
算法nm

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

配置主机名与ip的映射关系

本次进行简单的小实验 通过在windows上配置主机名与IP地址的映射关系&#xff0c;达到我们在xshell或其他远程连接设备上&#xff0c;不用IP地址登陆&#xff0c;只需要用主机名就能实现登陆的效果 配置 首先 需要查看自己虚拟机的IP地址&#xff0c;找到ens33或者ens160…

[项目] Boost搜索引擎

目录 1.项目相关背景 2.项目宏观原理 3.技术栈和项目环境 4.正排索引&&倒排索引 5.去标签与数据清洗 6.构建索引模块Index 6.1正排索引 6.2 建立倒排 jiebacpp使用 建立分词 7.搜索引擎模块Searcher Jsoncpp -- 通过jsoncpp进行序列化和反序列化 处理Cont…

Vscode中Vue文件保存格式化、 ElementUI、Font Awesome俩大插件使用

Vscode中Vue文件老一片红色出现格式错误&#xff1f;&#xff1f;如何运行别人的项目&#xff08;没有node_modules文件&#xff09;&#xff1f;&#xff1f;选用组件与图标&#xff1f;&#xff1f; 解决问题一 前提有&#xff1a;Prettier ESLint插件、ESLint插件 1.打开s…

Git图解-常用命令操作-可视化

目录 一、前言 二、初始化仓库 2.1 设置用户名与邮箱 2.2 初始化仓库 三、添加文件 四、查看文件状态 五、查看提交日志 六、查看差异 七、版本回退 八、删除文件 九、分支管理 9.1 创建分支 9.2 切换分支 9.3 查看分支 9.4 合并分支 十、文件冲突 十一、转视…

ROS从入门到精通系列(二十九)-- linux封装ROS 自启动脚本及可执行程序App

机器人分布式处理架构ROS分布式架构,HiBot架构主要使用C/S架构,其中HibotServer为服务器,Muqutte为消息服务器中间件,HiBotClient为运行在机器人上的客户端。主要实现了机器人任务的远程部署、监控、控制三大功能,机器人平台依赖于ROS。其架构如下图所示 Img Src: https:/…

第53篇-某商城sign参数分析-webpack【2023-03-07】

声明:该专栏涉及的所有案例均为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系本人删帖! 文章目录 一、前言二、网站分析三、完整代码一、前言 今天再来试一个webpack的例子吧,网址: aHR0cHM6Ly9tLnlxYi5jb20vYmFuay9…

【NLP相关】XLNET原理以及案例

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️&#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

类成员的方法

初识对象 生活中或是程序中&#xff0c;我们都可以使用设计表格、生产表格、填写表格的形式组织数据进行对比&#xff0c;在程序中&#xff1a; 设计表格&#xff0c;称之为&#xff1a;设计类&#xff08;class&#xff09; 打印表格&#xff0c;称之为&#xff1a;创建对象 …

C语言--一维数组

数组概念 数组&#xff1a;是一种构造数据类型&#xff0c;用以处理批量的同种类型的数据。 主要特点&#xff1a;数据量大 &#xff0c;类型相同 一维数组的定义 语法&#xff1a; 类型说明符 数组名[整型常量表达式]&#xff1b; 注意&#xff1a; 方括号里面的内容用于指…

css3横向无限公告消息滚动功能

html部分 {{item}}css部分 .boxingeds{ display: flex; flex-wrap: wrap; width: 150%; position: relative; left: 1000rpx; padding: 30rpx 0; position: absolute; top: 23%; z-index: 2; -webkit-animation: myfirst 30s linear 2s infinite; .textname{ display: inlin…

数字三角形 购物单

题目&#xff1a; 题目描述 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径&#xff0c;把路径上面的数加起来可以得到一个和&#xff0c;你的任务就是找到最大的和。 路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边…

从0开始自制解释器——实现简单的加法计算器

为什么要学习编译器和解释器呢&#xff1f;文中的作者给出的答案有下面几个&#xff1a; 为了深入理解计算机是如何工作的&#xff1a;一个显而易见的道理就是&#xff0c;如果你不懂编译器和解释器是如何工作的那么你就不明白计算机是如何工作的编译器和解释器用到的一些原理…

InnoDB——详细说明索引中B+树的操作和原理

本内容针对Mysql5.x&#xff1b; 索引是应用程序设计和开发的一个重要方面。 若索引太多&#xff0c;应用程序的性能可能会收到影响。 而索引太少&#xff0c;对查询性能又会产生影响。 索引的注意事项&#xff1a; 如果知道数据的使用&#xff0c;从一开始就应该在需要处添加…

车企数据分类分级的实践指南出炉!“数据安全推进计划”发布,奇点云参编

日前&#xff0c;“数据安全推进计划”&#xff08;DSI&#xff09;正式发布《智能网联汽车数据分类分级实践指南》&#xff08;下文简称“指南”&#xff09;&#xff0c;旨在以合规为主要导向&#xff0c;明确智能网联汽车数据分类分级的方法论&#xff0c;为数据全生命周期的…

每日学术速递3.7

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Dropout Reduces Underfitting 标题&#xff1a;Dropout 减少欠拟合 作者&#xff1a;Zhuang Liu, Zhiqiu Xu, Joseph Jin, Zhiqiang Shen, Trevor Darrel 文章链接&#xff1a;h…

SpringBoot(Tedu)—DAY01——环境搭建

SpringBoot(Tedu)—DAY01——环境搭建 目录SpringBoot(Tedu)—DAY01——环境搭建零、今日目标一、IDEA2021项目环境搭建1.1 通过 ctrl鼠标滚轮 实现字体大小缩放1.2 自动提示设置 去除大小写匹配1.3 设置参数方法自动提示1.4 设定字符集 要求都使用UTF-8编码1.5 设置自动编译二…

controller-runtime搭建operator开发环境

目录 基本结构 注入CRD 基本结构 首先下载相应的go pkg go get -u sigs.k8s.io/controller-runtime 接下来需要创建控制器和Manager Operator的本质是一个可重入的队列编程模式&#xff0c;而Manager可以用来管理Controller、Admission Webhook&#xff0c;包括访问资源对…

MATLAB算法实战应用案例精讲-【优化算法】樽海鞘群算法(SSA)及其算法变种(附matlab代码实现)

目录 前言 算法原理 算法思想 数学模型 &#xff08;1&#xff09;种群初始化 &#xff08;2&#xff09;领导者位置更新 &#xff08;3&#xff09;跟随者位置更新 代码实现 算法流程图 算法步骤 伪代码 SSA伪代码 MSSA伪代码 面向全局搜索的自适应领导者樽海鞘群算…

同模块设置不同应用主题方案

有时候公司内部会有不同应用但是有部分模块功能一样&#xff0c;只根据应用角色有些细节逻辑区分的场景。这时候往往采用模块化采用以应用至不同的APP。如果APP主题不一致&#xff0c;该如果解决。 方案&#xff1a; 在不同应用的config.gradle 下面根据不同应用定义不同的a…

基于SSM+SpringBoot《CRM客户关系管理系统》实战开发教程(附文档及源码)

1.项目简介 客户关系管理&#xff08;Customer Relationship Management&#xff0c;简称CRM&#xff09;&#xff0c;是指企业为提高核心竞争力&#xff0c;利用相应的信息技术以及互联网技术协调企业与顾客间在销售、营销和服务上的交互&#xff0c;从而提升其管理方式&…