数据结构与算法是什么?

news2025/1/18 6:06:33

人们常说:

程序 = 数据结构 + 算法

当遇到一个问题,或者有一个需求时,要设计程序来解决问题,重要的一步就是设计算法,并选择或者说设计相应数据结构来实现算法。

一、数据结构

数据结构在问题解决中主要用来:

  • 存放要处理的数据
  • 实现算法策略

数据结构可以用一个四元组来表示:

Data Structure = ( D, L, S, O)

D: data - 数据元素
L: logic - 数据元素之间的逻辑关系
S: storage - 逻辑关系在计算机中的存储结构
O: option - 某个数据结构所允许进行的操作

在这里插入图片描述

1. 逻辑结构

逻辑结构是指数据元素之间客观存在的关系,和数据在计算机中怎么存储无关,主要用于人们理解和交流以及指导算法的设计。

逻辑结构分为四类:

  • 线性结构:数据元素之间存在一对一的关系
  • 树形结构:数据元素之间存在一对多的关系
  • 图形结构:数据元素之间存在多对多的关系
  • 集合结构:数据元素属于同一个集合

在这里插入图片描述
一般来说,解决问题,要分析出要解决问题的数据关系,都要基于这四种逻辑关系来思考,如果关系比较复杂,也是由这四种关系组成的,逐层分析出来,发现逃不开这四种数据结构。

2. 存储结构

逻辑结构主要用于算法设计,而存储结构用于指导算法编程实现。

存储结构有基本的两种:

  • 顺序存储:逻辑上相邻的元素存储在物理位置相邻的存储单元中
  • 链式存储:在数据元素中添加一些地址域或辅助结构,用于存放数据元素之间的关系

在这里插入图片描述
顺序存储结构在内存中的地址是连续的,所以存取速度很快,但是插入或删除操作效率低,因为插入或删除操作涉及到移动数据元素。

链式存储结构在内存中的地址是不连续的,插入和删除操作效率高,但是由于寻址只能根据前后两个相连的元素依次排查,所以查找和遍历的效率低。

同样的逻辑机构(线性、树形、图形、集合)既可以采用顺序存储结构也可以采用链式存储结构来存储数据和关系。存储结构的选择主要考虑算法的效率,算法的时间和空间哪个更好,具体选择哪种和需求有关,基本存储结构既可以单独使用,也可以组合使用。

在这里插入图片描述

3. 操作

主要有遍历、查找、插入、删除、排序等等,具体需要实现的操作根据业务需求确定。

二、 算法

算法用来设计并实现一种用计算机来解决问题的方法。它满足下列性质:

  • 输入:有零个或多个输入量
  • 输出:产生至少一个输出量
  • 确定性:算法的指令清晰、无歧义
  • 有限性:算法的指令执行次数有限,执行时间有限

在这里插入图片描述
使用计算机解决问题的过程可以分为下面五个步骤:

  1. 问题的理解:搞清楚问题的输入、要求和输出
  2. 数据结构设计:设计能处理问题中数据的数据结构,还要设计能支持算法策略的数据结构
  3. 算法设计:选择算法策略,用适当的方式描述和逐步细化算法步骤
  4. 算法分析:发现有优化的地方,返回第二步,重新设计数据机构和算法
  5. 程序实现:用计算机编程,定义数据结构,编写代码实现,并调试和运行
    在这里插入图片描述
    一个需求问题有多种解决方案,我们经常需要通过不断尝试和积累经验才能找到最好的方案,如果熟练掌握了基本的数据结构和算法,对于在设计高效算法中是有很大帮助的,能更高效地解决需求问题。

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

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

相关文章

第一章三层交换应用

个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。个人爱好: 编程,打篮球,计算机知识个人名言:海不辞水,故能成其大;山不辞石…

CSS的选择器(超详细)

目录 一、常用的选择器 1.元素选择器 2.类选择器(class选择器) 3.id选择器 4.通配符选择器 二、群组选择器 三、关系选择器 1.后代选择器 2.子代选择器 3.相邻兄弟选择器 4.通用兄弟选择器 5.案例 四、属性选择器 五、伪类选择器 1.常用的伪类选择器 2.否定伪类 3.元…

智慧农业大数据平台:农业中的“大智慧”

智慧农业是现代化农业发展的重要途径,是利用物联网等现代信息技术提升农业生产管理水平,实现传统农业转型升级的重要措施。近年来,我国食品安全问题频发,究其根本原因,既有商家过度逐利的过错,也有农产品在…

MySQL 不相关子查询怎么执行?

1. 概述 从现存的子查询执行策略来看,半连接 (Semijoin) 加入之前,不相关子查询有两种执行策略: 策略 1,子查询物化,也就是把子查询的执行结果存入临时表,这个临时表叫作物化表。 explain select_type …

Linux: network: tcp_rmem/rmem_default

文章目录tcp_rmem - 取值是:3个整数向量: min, default, maxmindefault:maxrmem_defaultrmem_max具体的用法相关的方法tcp_rmem - 取值是:3个整数向量: min, default, max min TCP sockets使用的最小接收缓存大小。这个最小值的作用是在&am…

PowerPC平台移植RTL8822BU

目录编译驱动文件修改Makefile修改代码安装前置工具编译openssl编译libnl解决报错编译wpa_supplicant解决报错编译hostapd移植入嵌入式编译驱动文件 修改Makefile 修改代码 由于我这边kernel用的是比较老的,有些接口不支持,所以需要做一些处理 关于is…

K_A07_001 基于 STM32等单片机驱动A4988模块按键控制步进电机正反转

目录 一、资源说明 二、基本参数 1、参数 2、引脚说明 三、驱动说明 SETP时序 对应程序: 细分说明 程序 四、部分代码说明 1、接线说明 1.1、STC89C52RCA4988模块 1.2、STM32F103C8T6A4988模块 五、基础知识学习与相关资料下载 六、视频效果展示与程序资料获取 七、项目…

基于深度学习的人脸表情识别的AR川剧变脸(二)

在一中,我们训练了一个,可以识别angry、disgust、fear、happy、sad、surprised、normal七种人脸表情。 本文将建立在表情识别的基础上,设计一款AR变脸效果的软件,通过前置摄像头获取人脸图像,使用训练好的模型进行人脸…

航空摄影与正射摄影的区别

航空摄影 航空摄影是一种摄影,可以在其中从空中捕捉远处的图像。航空摄影的主题可以涵盖许多不同的领域,例如军事侦察、地质、农业等。但它也可以使用不同的技术手段,如无人机、直升机或飞机。本指南将简要概述航空摄影,如何在 G…

百趣代谢组学文献分享:代谢组学中复溶溶剂究竟如何选?

今天,BIOTREE 技术支持工程师Novenia 将和奋斗在实验室的小伙伴们分享一篇关于代谢组学实验过程中溶剂选择的文章Tuning Metabolome Coverage in Reversed Phase LC−MS Metabolomics of MeOH Extracted Samples Using the Reconstitution Solvent Composition。这是…

Canal1.1.6安装部署

什么是Canal 阿里巴巴 B2B 公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了同步杭州和美国异地机房的需求,从 2010 年开始,阿里系公司开始逐步的尝试基于数据库的日志解析&#…

反函数求导:自然对数 ln是怎么得到的;为什么自然对数的导数是 1/ x;arcsin 和 arccos 的导数求算

参考视频:MIT微积分 如何得到的自然对数 lnlnln 首先我们知道以 eee 为底的指数函数 exe^xex 其次,我们引入反函数(逆函数)的概念 f−1(y)f^{-1}(y)f−1(y) 对于任意的 xxx 如果 f(x)yf(x)yf(x)y 那么 xf−1(x)xf^{-1}(x)xf−1(…

Redis的优惠券秒杀问题(七)在集群模式下的问题

Redis的优惠券秒杀问题(七)在集群模式下的问题 问题描述 伪集群模式搭建 (1)IDEA启动镜像 (2)修改nginx配置 (3)验证nginx是否启动成功 BUG复现 (1&#xff0…

零入门容器云网络-4:基于DNAT技术使得外网可以访问本宿主机上veth-pair链接的内部网络

已发表的技术专栏(订阅即可观看所有专栏) 0  grpc-go、protobuf、multus-cni 技术专栏 总入口 1  grpc-go 源码剖析与实战  文章目录 2  Protobuf介绍与实战 图文专栏  文章目录 3  multus-cni   文章目录(k8s多网络实现方案) 4  gr…

数据结构:堆

文章目录一.堆的概念和性质二.堆的结构三.堆的实现3.1结构体声明3.2堆初始化3.3释放堆3.4打印堆3.5插入3.6删除3.7取堆顶元素3.8堆的元素个数3.9判空3.10补充四.建堆4.1向上调整建堆4.2向下调整建堆五.排序5.1升序5.2降序六.TOP-K问题一.堆的概念和性质 堆的概念: …

数据存储方式——KVELL:快速持续键值存储的设计与实现

文章目录前言一、背景1.当前流行的两种存储范式2.SSD性能的发展IOPS延迟和带宽吞吐量降低I / O突发3.NVMe ssd上当前KVs的问题3.1 CPU是瓶颈CPU是LSM KVs的瓶颈CPU是B树KVs的瓶颈3.2 LSM和B树KVs的性能波动二、KVELL1.KVs设计原则1.1 不共享1.2 不要在磁盘上排序,而…

Spring——IOC容器部分核心接口

Spring——IOC容器部分核心接口一、简介二、IOC容器核心接口1.BeanDefinition2.BeanDefinitionReader3.BeanDefinitionRegistry4.BeanFactory5.ApplicationContext6.BeanPostProcessor7.BeanFactoryPostProcessor8.BeanDefinitionRegistryPostProcessor9.总结一、简介 以下接口…

vim工具的使用

目录 vim的基本模式 vim三种基本模式(命令模式、底行模式、输入模式) 命令模式 vim正常(命令行)模式命令集 插入模式 底行模式 保存&退出 分屏 替换 执行shell指令 vim底行模式命令集 vim配置 配置文件的位置 配置文件的原理 如何配置 解决sudo无法使用的情…

[附源码]计算机毕业设计JAVA基于协同过滤算法的网上招聘系统

[附源码]计算机毕业设计JAVA基于协同过滤算法的网上招聘系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术&#xff1a…

【教学类-16-01】20221121《数字卡片9*2》(中班)

作品展示: ​ 打印墨水不够了​ 铅笔描边 ​ 剪开 ​ 每个人是A4 一半的大小 ​ 背景需求: 在数字像素图的基础上,我决定制作1-9的数字卡片,空心数字(华文彩云)涂色,卡片左上角写学号。——…