版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构构研究什什么数据处理理中数据据之间的的逻辑关关系、数据在在计算机机中的存存储方式式和在这种种“结构”上能进进行的操操作(运运算)。如何表示示数据,如何存存储数据据,如何对对数据进进行处理理3种逻辑辑结构线性结构构树形结结构(图图结构线性结构构的性质质和概念念性质:全序性:线性结结构的全全部结点点两两都都可以比比较前后后关系。单索性:除头结结点外,每个结结点有唯唯一的直直接前驱驱结点;除尾结结点外,每个结结点有唯唯一的直直接后继继结点。概念:直接前驱驱、直接后后继结点点:前后后相邻的的结点;前驱、后后继结点点:前面面、后面面的结点点。在不混淆淆的前提提下,直直接前驱驱和直接接后继可可简称
2、为为前驱和和后继。树结构的的性质和和概念性质和概概念:根结点:“树的根根”,一棵棵树只有有唯一的的一个根根结点。叶子结点点:“树的叶叶子”,一棵棵树有很很多叶子子。除根结点点外,每每个结点点有唯一一的父结结点;除除叶子结结点外,每个结结点允许许有多个个子结点点。父亲结点点,子女结结点,兄弟结结点,祖先结结点,子孙结结点。树结构是是一棵“倒立的的树”。4种存储储结构顺序结构构的优缺缺点用一块连连续的、无间隙隙的存储储空间按按顺序存存储各结结点。各结点地地址计算算方法(问题11):结点i的的地址 = 起起始地址址 + i每个结结点所占占存储空空间大小小各结点之之间逻辑辑关系表表示(问问题2):地址
3、址相邻关关系就表表达了结结点之间间的逻辑辑关系。顺序存储储结构是是在内存存中开辟辟一个连连续的空空间用来来存储数数据,因因此对于于内存的的需求和和苛刻,必须是是连续的的空间.在数据据查找(特别是是不按照照规律排排列的数数据),时间复复杂度教教少.效效率高. 链式结构构的优缺缺点链式存储储结构是是采取连连表指针针来指示示数据的的存储位位置,这这就可以以是在内内存中随随意的存存储,没没有必须须连续储储存空间间的要求求,对于于内存的的要求相相对教容容易.但但是要是是是从小小到大顺顺序排列列的数据据,链式式存储结结构的时时间复杂杂度教小小,效率率高.但但是要是是不规则则排布的的数据一一般时间间复杂度度
4、较高,效率更更低算法渐进进复杂度度的表示示方法算法时间间复杂度度的渐进进分析:在时间间复杂度度t(nn)中,剔除不不会从实实质上改改变函数数数量级级的项,经过这这样处理理得到的的函数是是t(nn)的近近似效率率值,但但这个近近似值与与原函数数已经足足够接近近,当问问题规模模很大时时尤其如如此。这这种效率率的度量量就称为为算法的的渐进复复杂度。(在不不引起混混淆的情情况下,也可简简称时间间复杂度度)算法的最最好、最最坏和平平均时间间复杂度度算法的复复杂度往往往取决决于输入入数据,例如一一个排序序算法的的时间复复杂度往往往取决决于输入入数据的的原始有有序程度度。因此此分析算算法复杂杂度时往往往要区
5、区分最好好情况、最坏情情况和平均情情况。例如,在在一个包包含n个个元素的的数组中中查找某某个数据据(假定定该数据据是数组组元素):最好情况况:该数数据就是是第0个个元素,只需比比较1次次就可以以结束了了,其复复杂度为为O(11)。最坏情况况:该数数据是数数组最后后一个元元素,则则需要比比较n次次,其复复杂度为为O(nn) 。评均情况况:假设设需要查查找的数数据是第第0个元元素、第第1个元元素、最后后一个元元素的概概率相等等,则平平均需要要查找的的次数为为:11/nn + 21/nn + + n1/nn = (n+1)/2。其其复杂度度为O(n)。基本的算算法复杂杂度类型型线性表、顺序表表、链表
6、表、栈和和队列的的基本概概念线性表是是一类线线性(区区别于树树型结构构和图结构构)数据据结构,它有多多种存储储结构和和应用方方法,从从而可以以细分为为顺序表表、链表、队列、栈等。“线性表表”是从逻辑辑结构的的角度来来描述数数据结构构的,它它主要有有两种存存储结构构:顺序序存储结结构和链式存存储结构构。顺序表(seqquenntiaal llistt)又称称为向量量(veectoor),它采用用定长的的一维数数组存储储结构。向量的主主要特性性:元素的类类型相同同。元素顺序序地存储储在一块块有连续续地址的的存储空空间中,每一个个元素按按其顺序序有唯一一的索引引值,又又称下标标值,用用它可以以方便地
7、地访问元元素内容容。STL提提供了33种通用用实体:容器、迭代器器和算法。链表(llinkkedllistt)的特特点是动动态申请请内存空空间,并并通过指指针来链链接结点点,按照照线性表表的前驱驱/后继继关系把把一个个个结点链链接起来来。几种用于于线性表表的链式式存储结结构:单链表;双链表;循环单链链表;循环双链链表。链表存储储是最常常用的存存储方式式之一,它不仅仅可以用用来表示示线性表表,而且也也可以用用于其他他非线性性的数据据结构中中,如树树结构和和图结构构。栈(sttackk)是一一种限制制访问端端口的线线性表,常称为为后进先先出表(LIFFOLLastt Inn, FFirsst OO
8、ut)。栈的一端端称为“栈顶”,表元素素的插入入和删除除均限制制在栈顶顶;表的的另一端端成为“栈底”。表元素的的插入,成为压压栈(pussh)。表元素的的删除,称为出出栈(popp)。队列(qqueuue)也也属于限限制访问问端口的的线性表表。数据据进入/取出的的方式为为先进先先出表(FIFFOFFirsst IIn, Firrst Outt),因因此队列列也称为为先进先先出表。只允许从从队列尾尾(reaar)进入数数据。只允许从从队列头头(froont)取出数数据。顺序表的的抽象数数据类型型:插入入元素/插入入一个元元素,使使之成为为第inndexx个元素素tempplatte voidd
9、Veectoor:inssertt( cconsst EELEMM& iitemm, iint inddex )asssertt( SSizee=0 & iindeexinndexx; ii- )/移移动元素素ellmliisti = eelmllistti-1;elmmlisstiindeex = iitemm;Sizze+;顺序表的的抽象数数据类型型:删除除元素tempplatte voidd Veectoor:remmovee( iint inddex )/删删除第iindeex个元元素asssertt( iindeex=0 & iindeexSSizee );forr( iint i=
10、iindeex; iSSizee-1; i+ )/移移动元素素ellmliisti = eelmllistti+1;Sizze-;顺序表的的优缺点点优点:直接存储储元素,每个元元素不需需要存储储指针等等其他信信息。直接访问问元素,访问第第k个元元素的时时间为OO(1),与nn无关。缺点:插入新元元素需要要移动大大量的元元素,复复杂度为为O(nn)。删除元素素也需要要移动大大量的元元素,复复杂度为为O(nn)。顺序表的的缺点之之一:插入新新元素时时需要移移动大量量的元素素。设顺序表表的长度度为n,在各各个位置置插入的的概率相相等,则则插入算算法平均均需要移移动n/2个元元素。其其复杂度度为O(n
11、)。顺序表的的缺点之之二:删除元元素时需需要移动动大量的的元素。删除算法法的复杂杂度也为为O(nn) 。单链表的的理解在单链表表中,每每个结点点由两部部分组成成:存放结点点数据的的datta域;存放指向向后继结结点的nnextt指针域域。因为每个个结点中中只有指指向后继继结点的的指针,因此由由这种结结点链接接而成的的链表,称为单单链表。表首指针针firrst:指向单单链表中中第0个个结点(结点序序号从00开始计计起)。单链表的的抽象数数据类型型:释放放所有结结点单链表的的抽象数数据类型型:插入入结点单链表的的抽象数数据类型型:删除除结点单链表的的优缺点点双链表的的理解双链表的的抽象数数据类型型
12、:插入入结点(简单情情形)双链表的的抽象数数据类型型:删除除结点(简单情情形)栈的理解解STL中中的栈栈的应用用1:十十进制整整数转换换成二进进制栈的应用用2:括括号匹配配顺序栈的的理解顺序栈的的抽象数数据类型型:压栈栈顺序栈的的抽象数数据类型型:出栈栈顺序栈的的抽象数数据类型型:取出出栈顶结结点顺序栈的的抽象数数据类型型:判空空链式栈的的理解链式栈的的抽象数数据类型型:释放放所有结结点链式栈的的抽象数数据类型型:压栈栈链式栈的的抽象数数据类型型:出栈栈链式栈的的抽象数数据类型型:取出出栈顶结结点链式栈的的抽象数数据类型型:判空空顺序栈和和链式栈栈的比较较计算表达达式的值值:中缀缀表达式式后缀
13、表表达式(不要求求记忆算算法执行行过程)计算表达达式的值值:计算算后缀表表达式的的值队列的理理解STL中中的队列列队列的应应用:BBFS的的实现顺序队列列的理解解顺序队列列的抽象象数据类类型:入入队列顺序队列列的抽象象数据类类型:出出队列顺序队列列的抽象象数据类类型:取取出队列列头结点点链式队列列的理解解链式队列列的抽象象数据类类型:入入队列链式队列列的抽象象数据类类型:出出队列链式队列列的抽象象数据类类型:取取出队列列头结点点顺序队列列和链式式队列的的比较第3章 字符串串编号知知识点类型掌握程程度代码要要求3_011字符串串的模式式匹配概念理解字符串的的模式匹匹配:给给定目标标字符串串T(T
14、Targget)和一个个模板PP(Paatteern),也是是字符串串,在目目标字符符串T中中查找与与模板完完全相同同的子串串,返回回T中和和P匹配配的第一一个子串串(简称称为配串串)的首首字符位位置。3_022朴素的的模式匹匹配算法法算法掌握原原理代码段段第0趟开开始比较较。在第第0趟,将模板板P的第第0个字字符对准准T的第第0个字符,将两字字符串对对应位置置上的字字符一一一比较,如果匹匹配成功则结束束,否则则(即匹匹配失败败)将PP右移一一个位置置进入第第1趟比比较,。第ss趟比较较是从TT的第ss个字符符和P的的第0个个字符开开始比较较。反复进行行每一趟趟的比较较,直到到出现以以下情况况
15、:执行到某某一趟,模板所所有字符符与目标标串中对对应的字字符都相相等,匹匹配成功功。模式移动动到最后后可能与与T比较较的位置置,但还还不能匹匹配,则则匹配失失败。3_033KMPP算法:模式串串前缀函函数值的的人工求求解算法掌握原原理3_044KMPP算法:模式串串前缀函函数值的的推导算法掌握原原理3_055KMPP算法:模式串串前缀函函数值的的求解算法掌握原原理代码段段3_066KMPP算法:实现算法掌握原原理代码段段第4章 二叉树树编号知知识点类型掌握程程度代码要要求4_011树与子子树概念理解4_022二叉树树的定义义概念理解4_033二叉树树的基本本概念概念理解4_044满二叉叉树概念
16、理解4_055完全二二叉树概念理解4_066扩充二二叉树概念理解4_077扩充二二叉树的的外部路路径长度度和内部部路径长长度计算掌握方方法4_088扩充二二叉树的的性质性质理解4_099二叉树树性质11(满二二叉树定定理)性质理解4_100二叉树树性质22(满二二叉树定定理推论论)性质理解4_111二叉树树性质33性质理解4_122二叉树树性质44性质理解4_133二叉树树性质55性质理解4_144二叉树树性质66性质理解4_155二叉树树的二叉叉链表实实现原理掌握4_166二叉树树的二叉叉链表实实现:从从二叉树树根结点点出发,查找指指定结点点的父结结点算法掌握原原理代码段段4_177二叉树树
17、的二叉叉链表实实现:返返回指定定结点左左兄弟算法掌握原原理代码段段4_188二叉树树的二叉叉链表实实现:返返回指定定结点右右兄弟算法掌握原原理代码段段4_199二叉树树的二叉叉链表实实现:删删除二叉叉树的递递归算法法算法掌握原原理代码段段4_200二叉树树的遍历历概念理解4_211二叉树树的前序序(中序序、后序序)遍历历算法掌握原原理4_222前序(中序、后序)遍历的的递归实实现算法掌握原原理代码段段4_233前序遍遍历的非非递归实实现算法掌握原原理代码段段4_244三叉链链表原理掌握4_255完全二二叉树的的数组实实现性质理解4_266二叉链链表及线线索二叉叉链表性性质性质理解4_277前序
18、(中序或或后序)线索二二叉树原理掌握原原理4_288二叉搜搜索树:定义概念理解4_299给定关关键码序序列,构构造二叉叉搜索树树算法掌握原原理4_300二叉搜搜索树:插入结结点算法掌握原原理代码段段4_311二叉搜搜索树:删除结结点算法掌握原原理代码段段4_322二叉搜搜索树:查找结结点算法掌握原原理代码段段4_333STLL优先级级队列应用掌握方方法完整程程序4_344最小(大)堆堆定义概念理解4_355堆的创创建筛筛选法算法掌握原原理4_366堆的操操作:插插入结点点算法掌握原原理4_377堆的操操作:删删除结点点算法掌握原原理4_388前缀编编码概念理解4_399加权平平均编码码长度概念
19、理解4_400Hufffmaan树加加权外部部路径长长度概念理解4_411构造HHufffmann树算法掌握原原理编号知知识点5_011森林的的概念森林(fforeest):由零零棵或多多棵不相相交的树树组成的的集合。注意:自自然界中中的树和和森林是是不同的的概念。而数据据结构中中的树和和森领只只有微小小的差别别,删去根根结点,则树就就变成森森林;加上一一个结点点作为根根,则森森林就变变成树。在树或森森林与二二叉树之之间存在在一个自自然的、一一对对应的关关系。任任何树或或森林都都唯一地地对应到到一棵二二叉树;反过来来,任何何二叉树树也都唯唯一地对对应到一一棵树或或一个森森林。5_022一般树树
20、转换成成二叉树树把一般树树转换成成二叉树树,可分分为3个个步骤:连线:在在所有兄兄相邻的的弟结点点之间加加一条连连线。切线:对对树中的的每个结结点,只只保留他他与第一一个子女女结点之之间的连连线,删删除它与与其它子子女结点点之间的的连线。旋转:以以树及子子树的根根结点为为轴心,将所有有水平方方向的连连线顺时时针旋转转一定角角度,使使之结构构层次分分明。(也就是是所有水水平方向向连线中中右边的的结点作作为左边边结点的的右子女女结点)5_033森林转转换成二二叉树把森林转转换成二二叉树,可分为为3个步步骤:连线:在在每棵树树的所有有兄弟结结点之间间加一条条连线,并将每每棵树的的根结点点用水平平线连
21、接接(与将将一般树树转换成成二叉树树相比,这是唯唯一增加加的操作作)。切线:对对树中的的每个结结点,只只保留他他与第一一个子女女结点之之间的连连线,删删除它与与其它子子女结点点之间的的连线。旋转:以以树及子子树的根根结点为为轴心,将所有有水平方方向的连连线顺时时针旋转转一定角角度,使使之结构构层次分分明。(也就是是所有水水平方向向连线中中右边的的结点作作为左边边结点的的右子女女结点)5_044二叉树树还原为为一般树树把二叉树树还原成成一般树树,可分分为3个个步骤:连线:如如果某结结点N是是其父结结点的左左子女结结点,则则将该结结点的右右子女及及沿着其其右指针针不断搜搜索到的的右子孙孙,都分分别
22、与结结点N的的父结点点用虚线线连接。切线:去去掉原二二叉树中中每个结结点与其其右子女女结点之之间的连连线,仅仅保留与与左子女女结点之之间的连连线。整理:把把虚线改改为实线线,按层层次整理理好。5_055二叉树树还原为为森林把二叉树树还原成成森林,可分为为2个步步骤:切线:先先从根结结点出发发沿着其其右指针针不断遍遍历到的的所有右右子孙,将每个个右子孙孙结点NN与N的的父结点点的连线线去掉,得到分分离的二二叉树。还原:把把分离后后的每棵棵二叉树树还原为为一般树树。所有有的这些些一般树树就组成成了森林林。5_066树的动动态“左子结结点/右右兄弟结结点”二叉链链表表示示5_077树的先先根、后后根
23、次序序遍历与二叉树树的深度度优先遍遍历有33种次序序不同的的是:树树的深度度优先遍遍历只有有先根次次序和后根次次序,不方便便按照中中序法定定义中根根次序,因为一一个根结结点有多多于两个个子结点点时无法法明确给给出根结结点和这这些子结结点的次次序。先根次序序遍历的的递归定定义为:访问根结结点;按先根次次序遍历历第一棵棵子树;按先根次次序遍历历其他子子树。后根次序序遍历的的递归定定义为:按先根次次序遍历历第一棵棵子树;访问根结结点;按先根次次序遍历历其他子子树。(注意理理解“后根”)按先根次次序遍历历树,等等价于按按先序遍遍历对应应的二叉叉树;按后根根次序遍遍历树,等价于于按中序序遍历对对应的二二
24、叉树。即:树的先根根次序遍遍历对应二二叉树的的先序遍遍历(表等价价)树的后根根次序遍遍历对应二二叉树的的中序遍遍历5_088树的广广度优先先遍历广度优先先遍历也也称为宽宽度优先先遍历,或层次次遍历。广度优先先遍历过过程为:首先依依次访问问层次为为0的结结点;然然后依次次访问层层次为11的结点点,等等等。5_099树的子子结点表表表示法法子结点(链)表表表示法法包含以以下两部部分:用数组存存储每个个结点,每个结结点包含含3个域域:结点点值、父结点点编号、子结点点链表表表头指针针顺序存存储方式式。将每个结结点的子子结点按按从左到到右的顺顺序连接接成一个个单链表表,并用它它的表头头指针域域指向这这个
25、链表表链式存存储方式式。优点:访访问每个个结点的的所有子子结点很很方便。缺点:访访问每个个结点的的兄弟结结点很难难实现。其他操作作讨论:插入结结点、删删除结点点、创建建树、删删除树、按各种种方式遍遍历、合合并两棵棵树等等等。5_100树的父父指针表表示法实现树的的最简单单方法是是对每个个结点只只保存一一个指针针域paarennt,指指向其父父结点,这种实实现方法法称为父父指针表表示法。父指针表表示法在在实现树树的操作作方面没没有任何何优势,但是它它可以实实现一种种特殊的的数据结结构并并查集。5_111等价关关系及等等价类“同班同同学”、“同属于于一个集集合”、“森林中中两个顶顶点属于于同一棵棵
26、树”都是等价价关系。等价关系系(eqquivvaleent rellatiion)的三个个条件(或称为为性质):自反性:如XX,则则XX;(假设用用“XY”表示“X与YY等价”)对称性:如XY,则则YX;传递性:如XY,且且YZ,则则XZ。如果XY,则则称X与与Y是一一个等价价对(eequiivallencce)。5_122并查集集的概念念及作用用判定两个个顶点是是否属于于同一个个等价类类(或集集合,或或同一棵棵树)。将两个等等价类(或两个个集合,或两棵棵树)合合并。一个等价价关系RR将集合合A划分分成为若若干个子子集合,这些子子集合互互不相交交,且这些些子集合合的并集集就是AA。5_133并
27、查集集的三个个重要运运算查找(FFindd):查找一一个元素素属于哪哪个集合合。判断:判判断两个个元素是是否属于于同一个个集合。往往包包含在合合并运算算中。合并(UUnioon):合并两两个集合合。5_144用父指指针表示示法实现现并查集集的思路路和方法法要判别每每个结点点属于哪哪棵树,只需要要记录每每个结点点的父结结点编号号(不需需要记录录每个结结点的其其他信息息,比如如左子女女、右兄兄弟等)。对于于每棵树树的根结结点,由由于它没没有父结结点,则则可以用用它所在在的树中中结点数数目代替替它的父父结点编编号(并并取负值值,假定定结点的的编号没没有负值值)。定义paarenntnn数组组,paa
28、renntii中存存放的就就是结点点i所在在的树中中结点ii父亲结结点的序序号。例例如,如如果paarennt44 = 5,就是说说4号结结点的父父亲是55号结点点。约定:如如果结点点i的父父结点(即paarenntii)是是负数的话话,表示示结点ii就是它它所在树树的根结结点;并并且用负负的绝对对值作为为这棵树树中所含含结点个个数。例例如,如如果paarennt77 = -44,说明明7号结结点就是是它所在在树的根根结点,这棵树树有4个个结点。初始时,所有结结点的ppareent 值值为-11,说明明每个结结点自成成一棵树树,且都都是根结结点。对读入的的每个等等价对XXY,先先判定结点点X和
29、YY是否属属于同一一个集合合,如果果是,则则不管;如果不不是,则则合并结点点X和结结点Y所所在的集集合。(并查集集的3种种运算的的实现在在例3中讨讨论)5_155并查集集:查找找运算及及优化方方案的实实现5_166并查集集:合并并运算及及优化方方案的实实现5_177并查集集应用第6章 图结构构编号知知识点类型掌握程程度代码要要求6_011图的基基本概念念概念理解图是由顶顶点集合合和顶点点间关系系集合(即边的的集合或或弧的集集合)组组成的数数据结构构,通常常可以用用G(V,E)来表表示,其其顶点集集合和边边的集合合分别用用V(G)和E(G)表示示。V(G)中的的元素称称为顶点点,用u、v等符号号
30、表示;顶点个个数称为为图的阶阶,通常常用n表示。E(G)中的的元素称称为边,用e等符号号表示;边的个个数称为为图的边边数,通通常用mm表示。顶点的度度(deegreee):一个顶顶点的度度是与它它相关联联的边的的条数,记作ddeg(u)在有向向图中,顶点的的度等于于该顶点点的出度度与入度度之和。其中,顶点uu的出度度是以uu为起始始顶点的的有向边边(即从从顶点uu出发的的有向边边)的数数目,记记作odd(u);顶顶点u的的入度是是以u为终点点的有向向边(即即进入到到顶点uu的有向向边)的的数目,记作iid(u)。顶顶点u的度数数:deg(u) = odd(u) + idd(u)。即在无向向图和
31、有有向图中中,所有有顶点的的度的总总和,等等于边的的数目的的两倍。这是因因为,不不管是有有向图还还是无向向图,在在统计所所有顶点点的度的的总和时时,每条条边都统统计了两两次。生成树:一个无无向连通通图的生生成树是是它的包包含所有有顶点的的极小连连通子图图,这里里所谓的的极小就就是边的的数目极极小。如如果图中中有n个顶点点,则生生成树有有n-1条条边。在图G(V, E)中,若从顶顶点vii出发,沿着一一些边经经过一些些顶点vvp1, vpp2, , vppm,到到达顶点点vj,则则称顶点点序列(vi, vp1, vpp2, vppm, vj)为为从顶点点vi到顶顶点vjj的一条条路径,其其中(v
32、vi, vp1), (vp1, vpp2), , (vpmm, vjj)为图图G中的边边。如果果G是有向向图,则则, , , 为图图中的有有向边。路径的长长度:路路径中边边的数目目通常称称为路径径的长度度。权值:某某些图的的边具有有与它相相关的数数,称为为权值。这这些权值值可以表表示从一一个顶点点到另一一个顶点点的距离离、花费的的代价、所需的的时间等等。如果果一个图图,其所所有边都都具有权权值,则则称为网网络。根据网络络中的边边是否具具有方向向性,又又可以分分为有向向网和无向网网。网络络可以用用G(V, E)表示示,其中中边的集集合E中中每个元元素包含含3个分分量:边边的两个个顶点和和权值。6
33、_022图的邻邻接矩阵阵概念理解在邻接矩矩阵中,除了一一个记录录各个顶顶点信息息的顶点点数组外外,还有有一个表表示各顶顶点之间间关系的的矩阵,称为邻邻接矩阵阵。6_033图的邻邻接表实实现算法掌握原原理代码段段邻接表:把同一一个顶点点发出的的边链接接在同一一个称为为边链表表的单链链表中。(这种种邻接表表也称为为出边表表)逆邻接表表:也称称为入边边表,顶顶点i的的边链表表中链接接的是所所有进入入该顶点点的边。适合求求顶点的的入度。以有向图图为例介介绍邻接接表的实实现方法法。为了了方便求求解顶点点的出度度和入度度,在实实现时,把出边边表和入入边表同同时包含含在表示示顶点的的结构体体中。6_044图
34、的遍遍历概念理解图的遍历历(Grraphh Trraveersaal)的的含义:从已给给图中的的某一顶顶点出发发,沿着着一些边边访遍图中中所有的的顶点,且使每每个顶点点仅被访访问一次次(注意意理解)。6_055图的深深度优先先搜索算法掌握原原理深度优先先搜索(Deppth Firrst Seaarchh):是是一个递递归过程程,有回回退过程程,它的的思想在在很多题题目当中中要用到到对图66.4.1(aa)所示示的无向向连通图图,采用用DFSS思想搜搜索的过过程为:(在图(a)中中,箭头头旁的数数字跟下下面的序序号对应应)从顶点AA出发,访问顶顶点序号号最小的的邻接顶顶点,即即顶点BB;然后访问
35、问顶点BB的一个个未访问问过的邻邻接顶点点,即顶顶点C;(3) 接着访访问顶点点C的一一个未访访问过的的邻接顶顶点,即即顶点GG;(4) 此时顶顶点G已已经没有有未访问问过的邻邻接顶点点了,所所以回退退到顶点点C;(5) 回退到到顶点CC后,顶顶点C也也没有未未访问过过的邻接接顶点了了,所以以继续回回退到顶顶点B;。6) 顶点BB还有一一个未访访问过的的邻接顶顶点,即即顶点EE,所以以访问顶顶点E;(7) 然后访访问顶点点E的一一个未访访问过的的邻接顶顶点,即即顶点FF;(8) 顶点FF有两个个未访问问过的邻邻接顶点点,选择择顶点序序号最小小的,即即顶点DD,所以以访问DD;(9) 此时顶顶点
36、D已已经没有有未访问问过的邻邻接顶点点了,所所以回退退到顶点点F;(10) 顶点点F还有有一个未未访问过过的邻接接顶点,即顶点点H,所所以访问问顶点HH;(11) 然后后访问顶顶点H的的一个未未访问过过的邻接接顶点,即顶点点I;(12) 此时时顶点II已经没没有未访访问过的的邻接顶顶点了,所以回回退到顶顶点H;(13) 回退退到顶点点H后,顶点HH也没有有未访问问过的邻邻接顶点点了,所所以继续续回退到到顶点FF;(14) 回退退到顶点点F后,顶点FF也没有有未访问问过的邻邻接顶点点了,所所以继续续回退到到顶点EE;(15) 回退退到顶点点E后,顶点EE也没有有未访问问过的邻邻接顶点点了,所所以
37、继续续回退到到顶点BB;(16) 回退退到顶点点B后,顶点BB也没有有未访问问过的邻邻接顶点点了,所所以继续续回退到到顶点AA;6_066图的广广度优先先搜索算法掌握原原理广度优先先搜索(Breeadtth FFirsst SSearrch) :是是一个分分层的搜搜索过程程,没有有回退的的情况,是非递递归的。6_077图的最最小生成成树概念理解生成树:连通图图G的一一个子图图如果是是一棵包包含G的的所有顶顶点的树树,则该该子图称称为G的的生成树树。用不同的的遍历图图的方法法,可以以得到不不同的生生成树;从不同同的顶点点出发,也可能能得到不不同的生生成树。生成树是是连通图图的最小小连通子子图。所
38、所谓最小小是指:若在树树中任意意增加一一条边,则将出出现一个个回路;若去掉掉一条边边,将会会使之变变成非连连通图。按照生成成树的定定义,nn 个顶顶点的连连通网络络的生成成树有 n 个顶顶点、nn-1 条边。最小生成成树:生生成树各各边的权权值总和和称为生生成树的的权,权权最小的的生成树树称为最最小生成成树。构造最小小生成树树的准则则:必须只使使用该网网络中的的边来构构造最小小生成树树;必须使用用且仅使使用 nn-1 条边来来联结网网络中的的 n 个顶点点;不能使用用产生回回路的边边。构造最小小生成树树的方法法:克鲁鲁斯卡尔尔(Krruskkal)算法和和普里姆姆(Prrim)算法。都得遵遵守
39、以上上准则。6_088Kruuskaal算法法算法掌握原原理完整程程序Krusskall算法执执行过程程:将m条边边存储在在edgges数数组中,并按权权值从小小到大排排序。依次检查查每条边边,如果果该边的的两个顶顶点不属属于同一一个集合合,则选选用该边边、并将将这两个个集合合合并;否否则弃用用这条边边。6_099最短路路径问题题概念理解最短路径径问题:如果从从图中某某一顶点点(称为为源点)到达另另一顶点点(称为为终点)的路径径可能不不止一条条,如何何找到一一条路径径,使得得沿此路路径各边边上的权权值总和和达到最最小。求解算法法:权值为非非负的单单源最短短路径问问题(固固定源点点)DDijkk
40、strra算法法(迪克克斯特拉拉算法,19559);权值为任任意值的的单源最最短路径径问题(固定源源点) Beellmman-Forrd算法法(贝尔尔曼福福特算法法);Belllmann-Foord算算法的改改进 SPPFA算算法;所有顶点点之间的的最短路路径问题题Flooyd-Warrshaall算算法(弗弗洛伊德德算法);6_100Dijjksttra算算法算法掌握原原理完整程程序为求得这这些最短短路径,Dijjksttra提提出按路路径长度度的递增增次序,逐步产产生最短短路径的的算法。首先求求出长度度最短的的一条最最短路径径,再参参照它求求出长度度次短的的一条最最短路径径,依次次类推,直
41、到从从顶点vv到其它它各顶点点的最短短路径全全部求出出为止。第7章 内排序序编号知知识点类型掌握程程度代码要要求7_011排序问问题的基基本概念念概念理解在计算机机应用软软件中经经常需要要对所管管理的各各种数据据进行处处理,排序往往往是这些些数据处处理中需需要用到到的核心心运算。内排序:如果待待排序的的记录个数数较少,整个排排序过程程中所有有的记录录都可以以直接存存放在内内存中,这样的的排序叫叫做内排排序(iinteernaal ssorttingg)。外排序:如果待待排序的的记录数数量太大大,内存存无法容容纳所有有的记录录,因此此排序过过程中还还需要访访问外存存,这样样的排序序叫做外外排序(
42、extternnal sorrtinng)。由于讨论论的是内内排序,在大部部分情况况下本章章都是考考虑基于于顺序存存储的排排序,即即待排序序的数据据是存储储在数组组中。记录(rrecoord):参与与排序的的元素称称为记录录,记录录是进行行排序的的基本单单位。序列(ssequuencce):所有待待排序记记录的集集合称为为序列。所所谓排序序就是将将序列中中的记录录按照特特定的顺顺序排列列起来。7_022用系统统函数实实现排序序应用掌握方方法完整程程序在实际编编程时,可能不需需要自己己实现排排序算法法,直接接调用系系统函数数实现排排序即可可。但这并并不意味味着本章章介绍的的排序算算法原理理、程序
43、序实现不不需要掌掌握。实现排序序的系统统函数主主要有:qsoort、sorrt函数数qsorrt函数数:采用快速速排序算算法(77.4.1节)实现。sortt函数:STL提提供的算算法,常常常结合合STLL中的容容器和迭迭代器使使用。7_033插入法法排序算法掌握原原理完整程程序逐个处理理待排序序的记录录,每个个新记录录都要与与前面那那些已排排好序的的记录进进行比较较,然后后插入到到适当的的位置。7_044冒泡法法排序算法掌握原原理完整程程序54204520425042054202402042002冒泡法是是不是一一定要比比较n-1趟?不一定!比如前前面的例例2中,n=88,但实实际上只只需要进进行5趟趟比较,后面22趟没有有进行交交换。也也就是说说,如果果在某一一趟比较较过程中中,没有有发现 前一个个数比后后一个数数大的情情况,即即没有进进行交换换数据,那么后后面就不不需要再再进行比比较了。极端的情情况,假假设n个个数已经经是按从从小到大大的顺序序排好了了,那么么实际上上只需要要进行一一趟比较较就可以以得出结结论了。7_055选择法法排序算法掌握原原理完整程程序直接选择择排序法法也需要要用一个个二重循循环来实实现,同同样可以以带着以以下3个类类似问题题来理解解其思想想(有nn个数,要求按按照从小小到大的的顺序排序):要进
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年人教版小学三年级数学上册第八单元第12课《小数四则运算》公开课教案
- 快件派送员安全演练能力考核试卷含答案
- 铸管工安全生产基础知识水平考核试卷含答案
- 石油开采工变更管理强化考核试卷含答案
- 网版印刷员安全文明知识考核试卷含答案
- 手风琴校音工岗位知识掌握考核试卷含答案
- 中药药剂员技术改进知识考核试卷含答案
- 电光源装配工岗前安全实践考核试卷含答案
- 钟表设计师保密模拟考核试卷含答案
- 催化剂试验工岗中心理健康考核试卷含答案
- 风湿免疫科|系统性红斑狼疮教学查房完整课件
- 2026年出租厂房安全责任告知书
- 2026广西壮族自治区机关事务管理局公开招聘广西实验幼儿园实名编制10人笔试备考试题及答案详解
- 江西文化演艺发展集团有限责任公司招聘笔试真题2025
- 2026年黑龙江哈三中高三一模英语试题含答案
- 放射治疗科直线加速器操作规范
- 雨课堂学堂在线学堂云《跨文化交际英语(北京理工)》单元测试考核答案
- 尺神经松解术课件
- 承包果园套袋合同范本
- 2024年《广西壮族自治区房屋修缮工程消耗量定额(建筑装饰工程)》
- 医院供氧系统安全管理
评论
0/150
提交评论