【数据结构与算法理论知识点】1.1基本概念

news2024/12/22 19:06:39

1.1基本概念

为什么要学习数据结构与算法?

Algorithms+Data Structures=Programs---- Niklaus Wirth ( Pascal程序设计语言之父、结构化程序设计首创者、图灵奖获得者)

  • 计算机程序:使用计算机求解问题
  • 算法是求解问题的步骤的描述:从蛮力到策略
  • 数据结构是数据的组织与存储:从杂乱无章到井然有序

主要内容

按章节划分:

  • 基本概念与复杂度分析
  • 线性表、栈和队列
  • 查找、排序与分治递归
  • 树和二叉树
  • 图与贪心算法
  • 动态规划

按内容划分:

  • 数据结构
    • 线性结构:线性表、栈和队列
    • 树:树和二叉树
  • 算法分析
    • 时间复杂度
  • 算法设计策略
    • 分支递归
    • 贪心算法
    • 动态规划

计算机问题

A task to be performed by computers(需要计算机解决的任务)

Problems  Mathematical function from inputs to matching outputs. (输入到对应输出的一个数学函数)

A particular input must always result in the same output every time the function is computed
(每次同样的输入计算机给出同样的输出)

计算机问题求解步骤

  • 算法是解决问题的方法
  • 理解问题
    • 设计算法前做的第一件事情
    • 仔细阅读问题的描述
    • 提出疑问
    • 手工处理一些实例
    • 考虑特殊情况
    • 确定输入
    • 抽象出问题,用数学表达式描述
  • 了解计算设备的性能,确定计算方法
    • 顺序算法
    • 并行算法
  • 选择精确解和近似解
    • 某些重要的问题无法求得精确解
    • 某些问题求精确速度慢,无法接受
  • 确定适当的数据结构
    • 算法+数据结构=程序
  • 算法设计策略
    • 使用算法解题的一般性方法用于解决计算领域的多种问题
  • 设计并描述算法
    • 自然语言
    • 为代码
    • 流程图
  • 证明算法的正确性
    • 证明对于每一个合法的输入,该算法都会在有限的时间内输出一个满足要求的结果。
    • 一般方法:数学归纳法
    • 证明算法的正确性与不正确哪一个更容易?
  • 分析算法
    • 算法有两种效率:时间效率和空间效率
    • 算法的另外两种特性:简单性和一般性
  • 为算法写代码
    • 用计算机程序实现算法
    • 在把算法转变为程序的过程中,可能会发生错误或者效率非常低

在这里插入图片描述

作为一种规律,一个好的算法是反复努力和重新修正的结果

  • 计算机算法设计是一个最优性问题:对于给定的问题需要花费多少力气(资源)?

  • 是不是每个问题都能够用计算机算法来解决?

发明或者发现算法是一个非常有创造性和非常值得付出的过程!!!!!!

常见的计算机问题

  • 排序(Sorting)
  • 查找(Search)
  • 串处理(String)
  • 图问题(Graph)
  • 组合问题(Combination)
  • 几何问题(Geometry)
  • 数值问题(Numerical)

什么是算法?

  • 算法是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。

在这里插入图片描述

算法的几个要点

  • 算法的每一个步骤都必须清晰、明确。
  • 算法所处理的输入的值域必须仔细定义。
  • 同样的一个算法可以用几种不同的形式来描述
  • 可能存在几种解决相同问题的算法
  • 针对同一个问题的算法可能会基于完全不同的解题思路,而且解题速度也会有明显的区别。

算法的特征

  • 输入(input):算法有零个或多个输入量;
  • 输出(output):算法至少产生一个输出量;
  • 确定性(definiteness):算法的每一条指令都有确切的定义,没有二义性;
  • 有穷性(diniteness):算法必须总能在执行有限步之后终止。

程序与算法的比较

  • 计算机程序是算法用某种程序语言的一个具体表示(实现)一个Java程序和一个C程序可能是用同样的方法解决同一个问题,这两个语言的表达的就是同一个算法
  • 计算机程序是用来给计算机读的
  • 而算法是给人来读的,直接将算法输入计算机是不能运行的
  • 程序可以不满足算法的有穷性

算法设计的目标

  • 用计算机解决相应的计算机问题
    • 在规定的资源限制下将问题给解决
  • 两个矛盾的目标
    • 容易理解,编码,调式
    • 有效利用计算机资源

算法设计的策略

  • Exhaustive search (穷举搜索)

  • Greedy method(贪心法)

  • Divide-and-conquer (分而治之)

  • Dynamic programming (动态规划)

  • Back tracking (回溯法)

  • Branch-and-bound (分支定界法)

数据结构

数据结构的例子

线性结构(线性表)

在这里插入图片描述

树形结构

在这里插入图片描述

在这里插入图片描述

网状结构(图)

在这里插入图片描述

在这里插入图片描述

数据结构基本概念和术语

  • **数据(Data) :**是客观事物的符号表示。在计算机科学中指的是所有能输入到计算机中并被计算机程序处理的符号的总称。
  • **数据元素(Data Element) :**是数据的基本单位,在程序中通常作为一个整体来进行考虑和处理。
  • 一个数据元素可由若干个**数据项(Data Item)**组成。数据项是数据的不可分割的最小单位。数据项是对客观事物某一方面特性的数据描述。
  • **数据对象(Data Object):**是性质相同的数据元素的集合,是数据的一个子集。如字符集合C={’A’,’B’, ‘C’,…} 。

在这里插入图片描述

什么是数据结构

数据结构(Data Structure):是指互相之间具有(存在)一定联系(关系)的数据元素的结合。元素之间的相互联系(关系)称为逻辑结构。数据元素之间的逻辑结构有四种基本类型

  • **集合:**结构中的数据元素除了“同属于一个集合”外,没有其它关系。
  • **线性结构:**结构中的数据元素之间存在一对一的关系。
  • **树型结构:**结构中的数据元素之间存在一对多的关系。
  • **图状结构:**结构中的数据元素之间存在多对多的关系。

在这里插入图片描述

逻辑结构

  • 数据元素之间的关系可以是元素之间代表某种含义的自然关系,也可以是为处理问题方便而人为定义的关系,
  • 这种自然或人为定义的 “关系”称为数据元素之间的逻辑关系,相应的结构称为逻辑结构。

物理结构

​ 物理结构包括数据元素的存储元素之间的关系的表示。
​ 元素之间的关系在计算机中有两种不同的表示方法:顺序表示和非顺序表示。由此得出两种不同的存储结构:
**顺序存储结构:**用数据元素在存储器中的相对位置来表示数据元素之间的逻辑结构(关系)。

在这里插入图片描述

链式存储结构:在每一个数据元素中增加一个存放另一个元素地址的指针(pointer),用该指针来表示数据元素之间的逻辑结构(关系)。

在这里插入图片描述

  • 顺序结构:数据元素存放的地址是连续的;

  • 链式结构:数据元素存放的地址是否连续没有要求。

    ​ 数据的逻辑结构和物理结构是密不可分的两个方面,一个算法的设计取决于所选定的逻辑结构,而算法的实现依赖于所采用的存储结构。
    ​ 在C语言中,用一维数组表示顺序存储结构;用结构体类型表示链式存储结构。

在这里插入图片描述

数据结构的三个组成部分

  • 逻辑结构: 数据元素之间逻辑关系的描述
  • 存储结构: 数据元素在计算机中的存储及其 逻辑关系的表现称为数据的存储结构或物理结构。
  • 数据操作: 对数据要进行的运算。

在这里插入图片描述

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

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

相关文章

套接字编程(二)UDP服务端与客户端的通信模拟实现

目录 一、前言 二、UDP客户端流程信息 1、创建套接字 2、为套接字绑定地址信息(不推荐) 3、发送数据(将数据放入发送缓冲区中) 4、接收数据(从socket结构体接收缓冲区中取出数据) 5、关闭套接字 三…

机器学习基本概念及问题梳理

前言:整理西瓜书第一、二章中的基本概念 待办:第二章评估方法、性能度量及后续内容未整理 下图梳理机器学习中部分概念 模型评估与选择相关知识点: 错误率(error rate, E):如果在m个样本中有a个样本分类…

WordPress安全指南:19个步骤让您的WordPress安全防线坚如磐石

谈到WordPress安全性,您可以采取很多措施来锁定您的网站,以防止黑客和漏洞影响您的电子商务网站或博客。您最不想发生的事情是一天早上醒来发现您的网站一团糟。因此,今天我们将分享许多技巧、策略和技术,您可以使用这些技巧、策略…

WEBSHELL管理工具流量特征——基础篇

前言 前一阵子帮别人做取证题目,有很多关于WEBSHELL的流量要分析,想起来还有没好好分析过于是准备写篇文章总结一下帮助大家能够快速的辨别WEBSHELL流量,下面我们展开文章来讲。 中国菜刀 这个应该是大家最熟悉的WEBSHELL管理工具&#xf…

NeuRay学习笔记

Neural Rays for Occlusion-aware Image-based Rendering 主页:https://liuyuan-pal.github.io/NeuRay/ 论文:https://arxiv.org/abs/2107.13421 Code:https://github.com/liuyuan-pal/NeuRay 效果: desktop摘要 We present a ne…

一文读懂 UniProt 数据库(2023 最新版)

一、UniProt 数据库介绍 Uniprot (Universal Protein )是包含蛋白质序列,功能信息,研究论文索引的蛋白质数据库,整合了包括EBI( European Bioinformatics Institute),SIB&#xff0…

【面试题】前端最新面试题-浏览器 dom、bom篇

原文见:语雀(https://www.yuque.com/deepstates/interview/fsitlt) ● BOM ● window对象 ○ frames ■ iframe ■ 跨窗口通信 ■ 同源策略/跨域 ○ navigator ● DOM ○ DOM结构 ○ DOM操作 ○ DOM事件 ■ 表单事件 ● 浏览器渲染 ○ 进程、…

Vue组件化编程的组件通信

对于组件化编程,组件之间的通信技术无疑是非常重要的内容,需要将细节牢牢把握。 组件通信,就是子组件放置在父组件内之后,父组件如何向子组件传递参数以及子组件如何与外部组件进行互动。 这部分的知识很重要,需要展开…

基于Ubuntu20.04搭建OpenHarmony v3.0.6的qemu仿真环境

基于Ubuntu20.04搭建OpenHarmony v3.0.6的qemu仿真环境0. 前言1. 安装Ubuntu1.1 更换华为源1.2 安装必要工具2. 下载代码2.1 解压与目录设置3. 配置环境3.1 安装库和工具3.2 设置python版本3.3 安装编译工具hb3.4 切换dash为bash4. 编译4.1 hb构建4.2 启动qemu5. 第二种环境配置…

Java之日期与时间、JDK8新增日期类、包装类、正则表达式、Arrays类、常见算法和Lambda表达式

目录日期与时间DateSimpleDateFormatCalendar概述JDK8新增日期类概述、LocalTime /LocalDate / LocalDateTimeInstantDateTimeFormatterDuration/PeriodchronoUnit包装类正则表达式Arrays类Arrays类概述,常用功能演示Arrays类对于Comparator比较器的支持常见算法选择…

[论文翻译] GIKT: A Graph-based Interaction Model forKnowledge Tracing

摘要随着在线教育的快速发展,知识追踪(KT)已成为追踪学生知识状态并预测他们在新问题上的表现的基本问题。在线教育系统中的问题通常很多,并且总是与更少的技能相关联。然而,以往的文献未能将问题信息与高阶问题-技能相…

计网必会:电路交换和分组交换

电路交换和分组交换的概念和区别,为什么分组交换更有效? 电路交换:由于电路交换在通信之前要在通信双方之间建立一条被双方独占的物理通路(由通信双方之间的交换设备和链路逐段连接而成) 特点是源和目标点建立起名副其…

C语言中的void*是什么?

目录1.void *是什么2.void*的解引用3.void*类型的应用场景1.void *是什么 我们之前学过许多类型的指针变量,如整形指针,字符指针,甚至数组指针,函数指针等。 int a 10; int *pa &a;//整形指针pa接受一个整形变量a的地址但…

阻塞队列-BlockingQueue

一、BlockingQueue介绍BlockingQueue 继承了 Queue 接口,是队列的一种。Queue 和 BlockingQueue 都是在 Java 5 中加入的。阻塞队列(BlockingQueue)是一个在队列基础上又支持了两个附加操作的队列,常用解耦。两个附加操作:支持阻塞…

Win10 每天蓝屏多次,蓝屏代码0x3B:SYSTEM_SERVICE_EXCEPTION

环境: 联想E14笔记本 Win10 专业版 问题描述: Win10 每天发生蓝屏多次,蓝屏代码0x3B:SYSTEM_SERVICE_EXCEPTION 查看事件查看器,系统日志筛选ID1001的事件,蓝屏多次基本上都是3B这错误代码 解决方案: 1.禁用AMD显…

vue3 pinia 状态管理(清晰明了)

前言 最近学习cloud项目,前端使用到 vue3 ts 等技术,其中包括 pinia ,从一脸懵到渐渐清晰过程,在此记录一下,若有不足,希望大佬可以指出。 中文官方文档:https://pinia.web3doc.top/ 一、什…

2022年海南省职业院校技能大赛“网络安全”比赛任务书

2022年海南省职业院校技能大赛“网络安全” 比赛任务书 一、竞赛时间 总计:360分钟 二、竞赛任务书内容 (一)拓扑图 (二)A模块基础设施设置/安全加固(350分) 一、项目和任务描述&#xff…

服务器怎么防勒索病毒

行业背景 随着金融行业信息化建设的飞速发展,金融行业信息化系统经过多年的发展建设,目前信息化程度已经达到了较高水平。信息技术在提高管理水平、促进业务创新、提升企业竞争力方面发挥着日益重要的作用。 需求分析 随着金融信息化的深入发展&#…

Linux调试器-gdb使用

目录 1. 背景 2. 开始使用 3. 理解 创建需要调试的代码 debug&&release 4 详细调试 list/l 行号 list/l 函数名 r或run break(b) info b(reak) d num disable breakpoints enable breakpoints n (next) s(step) breaktrac…

ConcurrentHashMap 的优化及其与HashTable, HashMap的区别

目录 1.优化一:减小锁粒度 2.优化二:只针对写操作加锁 3.优化三:CAS 4.优化四:扩容方式 HashMap是线程不安全的,HashTable是线程安全的,关键方法加锁了.我们更推荐的是ConcurrentHashMap ,更优化的线程安全哈希表 接下来我们总结一下ConcurrentHashMap 进行了哪些优化,比H…