数据结构理论

news/2025/3/6 5:14:40/

目录

基本概念和术语

数据

数据元素

数据项

数据对象

数据结构

数据的结构

逻辑结构

存储结构(物理结构)

数据类型

定义

原子数据类型

结构数据类型

抽象数据类型(Abstract Data Type,ADT)

算法和算法分析

算法

算法设计要求

时间复杂度

空间复杂度


基本概念和术语

数据

对客观事物的符号表示,描述客观事物的数、字符、以及所有能输入到计算机中,被计算机程序识别和处理的符号的集合。

包括数值型数据和非数值型数据。

数据元素

数据的基本单位,又别称元素、结点、记录。

一个数据元素可由若干个数据项组成。

数据项

数据项时数据的不可分割的最小单位。

一个数据元素可由若干个数据项组成。

数据对象

性质相同的数据元素的集合,是数据的一个子集。

数据结构

相互之间存在一种或多种特定关系的数据元素的集合。

形式定义

数据结构是一个二元组

(D,S)

D是数据元素的有限集,S是D上关系的有限集。 

数据的结构

逻辑结构

集合结构

线性结构

树形结构

图形结构(网状结构)

存储结构(物理结构)

顺序存储

链接存储

索引存储

散列存储

数据类型

定义

数据类型是一个数据结构和定义在这个数据结构上的一组操作的总称。

原子数据类型

是不可分解的数据类型,如C语言中的整型(int),实型(float),字符型(char),指针类型(*)和空类型(void)等。

结构数据类型

由若干成分(原子类型或结构类型)按某种结构组成的数据类型,结构数据类型可以看作是一种数据结构和定义在其上的一组操作组成的整体。如数组,由若干分量组成,每个分量可以是整数,也可以是数组(如int A[10])。

抽象数据类型(Abstract Data Type,ADT)

一个数学模型以及定义在该模型上的一组操作。

个人认为是一种模板化数据结构,即保留逻辑特性,但它的数据元素没有限制具体的数据类型,比如说一个链表可以是整型的、浮点型的,集合可以套集合等等等等。

三元组表示抽象数据类型。

(D,S,P)

D是数据对象,S是D上的关系集,P是对D的基本操作集。

算法和算法分析

算法

算法

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

有穷性

算法在执行有穷步后能结束。

确定性

每步都是确切的、无歧义。

可行性

操作可做。

输入

有0个或多个输入。

输出

有一个或多个输出。

算法设计要求

正确性

满足具体问题的需求。

可读性

偏于理解和修改。

健壮性

当输入数据非法时,也能适当反应。

效率高

执行时间少。

空间省

执行中需要的最大存储空间。

时间复杂度

渐进时间复杂度

时间复杂度是问题规模n的函数 f(n)

T(n)=O(f(n))

频度

语句重复执行的次数。

常量阶O(1)

{} 

线性阶O(n)

for(i=0;i<n;i++){} 

平方阶O($n^2$)

for(i=0;i<n;i++)

    for(j=0;j<n;j++)

        {} 

对数阶O(logn)

for(i=0;i<n;i=i*2){} 

指数阶O($2^n$)

for(i=1;i<=pow(2,n);i++){} 

排列阶O(n!)

for(i=j=1;i<=j;i++,j=j*(j+1)){}

空间复杂度

空间复杂度

算法执行时所需要的存储空间的量度,也是问题规模的函数

S(n)=O(f(n))


http://www.ppmy.cn/news/1576985.html

相关文章

安卓-关于使用startForegroundService启动服务于服务提前终止的思考

在安卓官方说明中对前台服务的说明是这样的&#xff1a; 从应用启动前台服务分为两步。首先&#xff0c;您必须通过调用 context.startForegroundService() 来启动服务。然后&#xff0c;让该服务调用 ServiceCompat.startForeground() 将自身提升为前台服务。启动前台服务 |…

【每日八股】计算机网络篇(二):TCP 和 UDP

目录 TCP 的头部结构&#xff1f;TCP 如何保证可靠传输&#xff1f;1. 确认应答机制2. 超时重传3. 数据排序与去重4. 流量控制5. 拥塞控制6. 校验和 TCP 的三次握手&#xff1f;第一次握手第二次握手第三次握手 TCP 为什么要三次握手&#xff1f;问题一&#xff1a;防止历史连接…

大型语言模型中微调和提炼的详细技术比较

目录 概要 介绍 技术背景 微调和参数高效策略 模型提炼 理念的冲突 QLoRA:将量化与低秩自适应相结合 高级量化:不破坏的缩小艺术 4 位量化为何有效 低阶适配器集成:效率的艺术 低秩适应为何有效 QLoRA 为何如此重要:宏观视角 提炼:机制与训练动态 学生永远无…

【C++设计模式】第四篇:建造者模式(Builder)

注意&#xff1a;复现代码时&#xff0c;确保 VS2022 使用 C17/20 标准以支持现代特性。 分步骤构造复杂对象&#xff0c;实现灵活装配 1. 模式定义与用途 核心目标&#xff1a;将复杂对象的构建过程分离&#xff0c;使得同样的构建步骤可以创建不同的表示形式。 常见场景&am…

Rust Async 并发编程:任务、消息传递与 `join`

1. 创建异步任务 在传统的多线程模型中&#xff0c;我们使用 std::thread::spawn 来创建新的线程。而在 async 模型中&#xff0c;使用 spawn_task 代替 thread::spawn 来创建异步任务&#xff0c;并结合 await 关键字来处理异步操作。 示例&#xff1a;使用 spawn_task 进行…

Python在NFT市场中的应用:从创建到交易的完整指南

Python在NFT市场中的应用&#xff1a;从创建到交易的完整指南 大家好&#xff0c;我是Echo_Wish。今天我们来聊聊一个近年来备受关注的话题——NFT&#xff08;非同质化代币&#xff09;。NFT的出现不仅为数字艺术家和收藏家带来了全新的机会&#xff0c;也为开发者提供了一个…

MySQL之 NoneType object has no attribute cursor

查下MySQL报错日志 首先&#xff0c;看下日志文件所在位置 SHOW GLOBAL VARIABLES LIKE log_error;然后查看日志文件中当时的报错信息 发现这样的日志&#xff1a; Aborted connection … to db … Got timeout reading communication packets初步猜测是&#xff0c;数据库…

从零搭建Tomcat:深入理解Java Web服务器的工作原理

Tomcat是Java生态中最常用的Web服务器之一&#xff0c;广泛应用于Java Web应用的部署和运行。本文将带你从零开始搭建一个简易的Tomcat服务器&#xff0c;深入理解其工作原理&#xff0c;并通过代码实现一个基本的Servlet容器。 1. Tomcat的基本概念 Tomcat是一个开源的Servl…