还剩58页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
数据结构与算法教学课件课程简介目标与内容课程目标主要内容帮助学生掌握基本的数据结构和算法,为进一步学习计算机科学包括线性表、栈、队列、字符串、树、图、查找、排序等基本数相关课程奠定坚实的基础,提升编程能力和解决问题的思维方式据结构和算法,并介绍其应用场景和实现方法学习数据结构与算法的重要性1提升编程能力算法是程序的灵魂,学习算法能够提高代码效率和可读性2增强解决问题的能力算法可以将复杂问题分解成更小的、可解决的问题,培养逻辑思维和抽象思维能力3拓宽知识面数据结构和算法是计算机科学的基础,掌握它们有助于更深入地理解计算机的工作原理4提升就业竞争力许多企业在招聘时都要求应聘者具备数据结构和算法方面的知识算法效率分析时间复杂度概念常见时间复杂度算法的时间复杂度是指算法执行包括常数时间复杂度O
1、线性所需要的操作次数,通常用大O时间复杂度On、对数时间复杂符号来表示例如,On表示算度Olog n、平方时间复杂度法执行的时间复杂度与输入数据On^2等的规模n成正比分析方法常用的分析方法包括语句频度法、递归树方法、等价替换法等算法效率分析空间复杂度空间复杂度是指算法执例如,On表示算法常见的空间复杂度包括行过程中所需要的额外的空间复杂度与输入数常数空间复杂度O
1、存储空间,也用大O符据的规模n成正比线性空间复杂度On号来表示等线性表定义与基本操作定义1线性表是一种线性结构,它由一系列数据元素构成,每个元素都有一个唯一的序号,称为下标基本操作2线性表的基本操作包括插入、删除、查找、修改、取值、长度、清空等实现方法3线性表可以用顺序存储结构或链式存储结构来实现线性表的顺序存储结构概念优点缺点应用场景顺序存储结构是指用一组连访问速度快,可以通过下标插入和删除操作效率低,需适合数据元素个数固定,且续的存储单元来存储线性表直接访问元素要移动大量数据元素插入和删除操作不频繁的情中的数据元素况线性表的链式存储结构概念优点链式存储结构是指用一组分散的存储单1元来存储线性表中的数据元素,每个存插入和删除操作效率高,只需修改指针2储单元包含数据元素和指向下一个存储单元的指针应用场景4缺点3适合数据元素个数不固定,且插入和删访问速度慢,需要遍历链表才能访问指除操作频繁的情况定元素链表单链表、双链表、循环链表循环链表双链表链表最后一个节点的指针指向第一个节点单链表每个节点包含数据和指向前一个节点和下,形成循环每个节点包含数据和指向下一个节点的指一个节点的指针针顺序表与链表的比较顺序表链表优点访问速度快;缺点插入和删除操作效率低优点插入和删除操作效率高;缺点访问速度慢栈定义与基本操作定义栈是一种后进先出(LIFO)的线性表,只允许在表的一端进行插入和删除操作,称1为栈顶基本操作2包括入栈(PUSH)、出栈(POP)、获取栈顶元素(TOP)、判断栈是否为空(EMPTY)等实现方法3栈可以用顺序存储结构或链式存储结构来实现栈的应用表达式求值中缀表达式1人类习惯使用的表达式,例如1+2*3后缀表达式2运算符位于操作数之后,例如123*+求值过程3利用栈将中缀表达式转换为后缀表达式,再利用栈进行后缀表达式的计算栈的应用递归算法递归算法是一种函数调用自身的方式,栈用于存储函数调用过程中的局部变量、参数等信息队列定义与基本操作12定义基本操作队列是一种先进先出(FIFO)的线性包括入队(ENQUEUE)、出队(表,只允许在一端进行插入操作(称DEQUEUE)、获取队首元素(为入队),而在另一端进行删除操作FRONT)、判断队列是否为空((称为出队)EMPTY)等3实现方法队列可以用顺序存储结构或链式存储结构来实现队列的顺序存储结构循环队列概念循环队列是一种特殊的顺序队列,它将队列的尾部连接到头部,形成一个环状结构,以充分利用存储空间队列的链式存储结构链式存储结构的队列,每个节点包含数据和指向下一个节点的指针,队列头和队列尾分别指向链表的首尾节点队列的应用消息队列概念优势消息队列是一种用于异步通信的中间件,它允许不同的程序或进提高系统性能、解耦系统、增强系统健壮性、支持异步操作程通过发送和接收消息来进行通信字符串定义与基本操作定义1字符串是由零个或多个字符组成的有限序列,通常用引号括起来,例如hello基本操作2包括字符串的长度、比较、连接、查找、替换、分割、反转等字符串的模式匹配朴素算法概念朴素算法是一种简单的模式匹配算法,它从文本的第一个字符开始,逐个字符与模式进行比较,如果匹配成功,则继续比较下一个字符,否则移动模式并继续比较时间复杂度最坏情况下时间复杂度为Om*n,其中m为模式的长度,n为文本的长度字符串的模式匹配算法KMPKMP算法是一种高效的模式匹KMP算法的核心是next数组配算法,它利用模式自身的特,该数组存储了模式中每个字点,避免了不必要的字符比较符的最长前缀后缀匹配长度KMP算法的时间复杂度为Om+n,其中m为模式的长度,n为文本的长度树基本概念与术语定义术语树是一种非线性数据结构,它是包括根节点、父节点、子节点、由nn≥0个节点组成的有限集兄弟节点、叶节点、树的深度、合,它满足如下条件树的高度等特点树的结构具有层次性,每个节点只有一个父节点,但可以有多个子节点二叉树定义与性质二叉树是一种特殊的树,每个节点最二叉树的性质非空二叉树的第i层多只有两个子节点,分别称为左子节上最多有2^i-1个节点,深度为k的点和右子节点二叉树最多有2^k-1个节点二叉树的存储结构顺序存储结构1将二叉树的节点按照层序存储在数组中链式存储结构2用链表来存储二叉树的节点,每个节点包含数据和指向左子节点和右子节点的指针二叉树的遍历先序、中序、后序先序遍历根节点→左子树→右子树中序遍历左子树→根节点→右子树后序遍历左子树→右子树→根节点二叉树的遍历层序遍历层序遍历是指从根节点开始,逐层遍历二叉树的节点,每层从左到右依次访问节点层序遍历通常使用队列来实现,将根节点入队,然后依次出队并访问节点,并将节点的子节点入队线索二叉树概念优点1线索二叉树是指将二叉树中指向空子节可以快速找到节点的前驱节点或后继节点的指针改为指向其前驱节点或后继节2点,方便进行中序遍历点的指针,称为线索树与森林树树是一种层次结构,每个节点只有一个父节点,但可以有多个子节点森林森林是指多棵树的集合树、森林与二叉树的转换树的遍历先序遍历中序遍历后序遍历层序遍历根节点→左子树→右子树左子树→根节点→右子树左子树→右子树→根节点从根节点开始,逐层遍历树的节点,每层从左到右依次访问节点赫夫曼树与赫夫曼编码赫夫曼树赫夫曼编码赫夫曼树是一种带权路径长度最小的二叉树,它可以用于压缩数赫夫曼编码是一种变长编码,它将频繁出现的字符用较短的代码据表示,而很少出现的字符用较长的代码表示,从而实现数据压缩图基本概念与术语定义1图是由顶点和边组成的集合,顶点表示图中的元素,边表示顶点之间的关系术语2包括有向图、无向图、完全图、连通图、生成树、路径、回路等特点3图的结构是非线性的,它可以表示更复杂的关系图的存储结构邻接矩阵概念1邻接矩阵是指用一个二维数组来存储图的顶点之间的关系,数组中第i行第j列元素表示顶点i和顶点j之间是否存在边,以及边的权重优点2判断两个顶点之间是否存在边,以及边的权重方便缺点3存储空间占用较大,尤其对于稀疏图图的存储结构邻接表图的遍历深度优先搜索12概念特点深度优先搜索(DFS)是一种图的遍历算DFS通常使用栈来实现,它会优先探索一法,它从一个顶点开始,沿着一条路径尽条路径的尽头,然后回溯到上一层节点可能地向下遍历,直到遇到叶子节点或所有邻接点都被访问过,然后再回溯到上一层节点,继续遍历其他路径3应用DFS可以用于解决图中的连通性问题、拓扑排序、寻找强连通分量等图的遍历广度优先搜索概念广度优先搜索(BFS)是一种图的遍历算法,它从一个顶点开始,依次访问该顶点的所有邻接点,然后访问这些邻接点的邻接点,依此类推,直到访问完所有可达的顶点最小生成树算法Prim概念Prim算法最小生成树是指一个连通无向图中的生成树,且该生成树的所有Prim算法是一种贪心算法,它从一个顶点开始,不断选择与当边权之和最小前树最近的顶点加入树,直到所有顶点都加入树中最小生成树算法Kruskal概念1最小生成树是指一个连通无向图中的生成树,且该生成树的所有边权之和最小算法Kruskal2Kruskal算法也是一种贪心算法,它将边按照权重从小到大排序,然后依次选择不在同一个连通分量中的边加入树,直到所有顶点都加入树中最短路径算法Dijkstra概念Dijkstra算法最短路径是指从图中的一个顶点到另一个顶点的所有路径中,Dijkstra算法是一种贪心算法,它从一个顶点开始,不断选择路径长度最小的路径与当前顶点距离最近的未被访问过的顶点,直到访问完所有顶点最短路径算法FloydFloyd算法是一种动态规划算法,它可以求解图中任意两个顶点之间的最短路径Floyd算法使用一个n*n的矩阵来存储所有顶点对之间的距离,并通过迭代更新矩阵来求解最短路径拓扑排序概念应用拓扑排序是指将有向无环图(拓扑排序可以用于解决任务调度DAG)的顶点排序,使得对于图问题、编译优化问题等中的任意一条边u,v,u在排序中都排在v之前实现方法拓扑排序通常使用深度优先搜索来实现,它会先找到图中所有入度为0的顶点,然后将这些顶点按照顺序输出,并删除这些顶点及其关联的边,继续寻找入度为0的顶点,直到所有顶点都被输出关键路径关键路径是指一个有向无环图中从源点到关键路径上的活动是决定整个项目完成时关键路径可以用于项目管理,通过优化关汇点的最长路径间的关键活动,必须保证这些活动按时完键路径上的活动来缩短项目的完成时间成才能保证整个项目按时完成查找基本概念概念1查找是指在一个数据集合中寻找特定元素的操作,也称为检索或搜索目标2确定特定元素是否存在于数据集合中,或者找到该元素的位置顺序查找概念顺序查找是一种简单的查找算法,它从数据集合的第一个元素开始,逐个比较元素,直到找到目标元素或遍历完所有元素时间复杂度最坏情况下时间复杂度为On,其中n为数据集合的大小折半查找折半查找是一种效率更高的查找算法折半查找每次将查找范围缩小一半,折半查找的时间复杂度为Olog n,它适用于有序的数据集合直到找到目标元素或查找范围为空,其中n为数据集合的大小分块查找概念时间复杂度分块查找是一种折衷的查找算法,它将1分块查找的时间复杂度为Om+n,数据集合分成若干个块,每个块中的元2其中m为块的个数,n为块内元素的个素是有序的,但不同块之间不需要排序数二叉排序树优点性质插入、删除、查找操作的时间复杂度平均定义
1.左子树的所有节点的值都小于根节点的情况下为Olog n,其中n为树的节点个二叉排序树是一种特殊的二叉树,它满足值;
2.右子树的所有节点的值都大于根节数以下性质点的值;
3.左子树和右子树也都是二叉排序树平衡二叉树概念优点平衡二叉树是指左右子树高度差绝对值不超过1的二叉排序树可以避免二叉排序树退化为线性结构,保证查找、插入、删除操作的时间复杂度为Olog n树与树B B+树B1B树是一种平衡的多路查找树,它可以用于外存数据结构,例如数据库索引树B+2B+树是B树的变种,它将所有数据存储在叶子节点上,并使用非叶子节点作为索引优点3B树和B+树可以有效地减少磁盘IO次数,提高数据访问效率散列表基本概念定义散列表是一种基于哈希函数实现的数据结构,它允许快速插入、删除和查找元素原理散列表使用哈希函数将元素映射到一个数组中,数组的索引称为哈希值优点平均情况下,散列表的插入、删除和查找操作的时间复杂度为O1散列函数散列函数是一种将任意长度的散列函数的输出称为哈希值,输入映射到固定长度的输出的哈希值应该尽可能地均匀分布函数在输出空间中常见的散列函数包括除留余数法、平方取中法、折叠法、数字分析法等解决冲突的方法概念解决方法当两个不同的元素映射到同一个包括开放定址法、链地址法等哈希值时,称为哈希冲突优点解决冲突的方法可以有效地避免散列表的空间浪费排序基本概念排序是指将一组数据按照特定的顺序排列常见的排序顺序包括升序排序和降序排序排序算法是计算机科学中最基础的算法之的操作一,它可以用于解决各种数据处理问题插入排序直接插入排序概念1直接插入排序是一种简单的排序算法,它将数据集合中的元素依次插入到已经排好序的子序列中,从而实现整个数据集合的排序时间复杂度2最坏情况下时间复杂度为On^2,平均情况下时间复杂度为On^2插入排序希尔排序概念希尔排序是一种改进的插入排序算法,它将数据集合分成若干个子序列,对子序列进行插入排序,然后逐渐缩小子序列的间距,最后对整个数据集合进行插入排序时间复杂度希尔排序的时间复杂度通常为On^
1.5选择排序简单选择排序简单选择排序是一种简单的排序算法,它将数据集合中的最小元素放在第一个位置,将第二小的元素放在第二个位置,依此类推,直到所有元素都排好序简单选择排序的时间复杂度为On^2选择排序堆排序概念堆排序是一种基于堆数据结构的排序算法,它将数据集合构建成一个堆,然后不断从堆中取出堆顶元素(最大或最小元素),直到所有元素都取出时间复杂度堆排序的时间复杂度为On*log n交换排序冒泡排序冒泡排序是一种简单的排序算法,它冒泡排序的时间复杂度为On^2通过反复比较相邻元素,将较大的元素交换到后面,将较小的元素交换到前面,直到所有元素都排好序交换排序快速排序概念1快速排序是一种高效的排序算法,它选择一个元素作为基准,将数据集合划分为两个子集合,一个子集合中所有元时间复杂度素都小于基准元素,另一个子集合中所有元素都大于基准2元素,然后递归地对两个子集合进行排序平均情况下时间复杂度为On*log n,最坏情况下时间复杂度为On^2归并排序概念归并排序是一种基于分治思想的排序算法,它将数据集合递归地分成两个子集合,对两个子集合进行排序,然后将排序后的子集合合并成一个有序的数据集合时间复杂度归并排序的时间复杂度为On*log n基数排序基数排序是一种非比较排序算基数排序的时间复杂度为法,它将数据集合中的元素按On*k,其中n为数据集合的照每个位的值进行排序,从最大小,k为数据元素的最大位数低位开始,依次对每个位进行排序基数排序适用于数据元素的位数比较少,且每个位的取值范围比较小的情况。
个人认证
优秀文档
获得点赞 0