数据结构术语总结

数据结构术语

严蔚敏《数据结构(C语言版)》

1.真题中出现过的

1、堆分配存储关系:串的存储方式可大致分为三种:定长顺序存储方式、动态分配的堆分配存储方式以及链式存储方式。所谓堆,即为一块内存。当程序运行时,系统自动为程序分配一块内存,这块内存是空的。每当使用malloc或new函数的时候,新声明的变量就都会被存入这片内存中。使用完毕后,若不及时free或delete之前声明的变量,堆中刚占用的内存就不会释放,即为内存泄露问题。总而言之,串的堆存储就是根据需要动态分配字符串的存储空间。
2、完全图(2):对于无向图来说,任意两点之间有一条无向边的图叫无向完全图,若它有n个顶点,则有n*(n-1)/2条边;对于有向图来说,任意两点之间有方向相反的两条边叫有向完全图,若它有n个顶点,则有n*(n-1)条边。
3、树的结点层次(2):根的层次为1,根的直接左右孩子层次为2,以此类推层次逐渐递增。
4、拓扑排序(2):对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。
5、时间复杂度(2): 算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。这是一个关于代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。一般情况下,算法的基本操作重复执行的次数是模块n的某一个函数f(n),因此,算法的时间复杂度记做:T(n)=O(f(n))
6、队列(2):队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
7、森林:由m(m>=0)棵互不相交的树的集合称为森林。
8、线性表的链式存储结构:为了表示每个数据元素与其直接后继元素之间的逻辑关系,每个元素除了存储本身的信息外,还需要存储指示其直接后继的信息。n个结点链接成一个链式线性表的结构叫做链表,当每个结点中只包含一个指针域时,叫做单链表。
9、图的遍历:图的遍历是指从图中的任一顶点出发,对图中的所有顶点访问一次且只访问一次。
10、哈希函数的同义词:选取某个函数,依该函数按关键字计算元素的存储位置,并按此存放;查找时,由同一个函数对给定的值计算地址,将给定的值与地址单元中元素关键字进行比较,确定是否查找成功,即哈希方法。 哈希方法中使用的转换函数即为哈希函数。按照这个思想构造的表叫做哈希表。 通常关键字的集合比哈希地址集合大得多,所以经过哈希函数变换后,可能将不同的关键字映射到同一个哈希地址上,这种现象称为冲突。映射到同一哈希地址上的关键字称为同义词。
11、二叉查找/排序树(3):二叉查找树(Binary Search Tree),又被称为二叉搜索树。设x为二叉查找树中的一个结点,x节点包含关键字key,节点x的key值记为key[x]。如果y是x的左子树中的一个结点,则key[y] <= key[x];如果y是x的右子树的一个结点,则key[y] >= key[x]。在二叉查找树中:
(01) 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(02) 任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(03) 任意节点的左、右子树也分别为二叉查找树。
(04) 没有键值相等的节点(no duplicate nodes)
12、(图的)广度优先搜索:广度优先遍历图是以顶点v为起始点,由近至远,依次访问和v有路径相通而且路径长度为1,2,……的顶点。为了使“先被访问顶点的邻接点”先于“后被访问顶点的邻接点”被访问,需设置队列存储访问的顶点。
13、(二叉树结点的)平衡因子:某结点的左子树与右子树的高度(深度)差即为该结点的平衡因子(BF,Balance Factor)。
14、**有向完全图复杂度
15、数据结构的四种基本逻辑结构((数据结构的)结构类型)(2)
:指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关。逻辑结构包括:(1)集合结构:数据结构中的元素之间除了"同属一个集合" 的相互关系外,别无其他关系;(2)线性结构:数据结构中的元素存在一对一的相互关系;(3)树形结构:数据结构中的元素存在一对多的相互关系;(4)图形结构:数据结构中的元素存在多对多的相互关系。
16、算法及其特性(2):算法是堆特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作;此外,一个算法还具有下列5个重要的特性:(1)有穷性:指算法必须能在执行有限个步骤之后终止(2)确定性:算法的每一步骤必须有确切的定义,读者理解时不会产生二义性,相同的输入只能有相同的输出;(3)可行性:算法中执行的任何计算步都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成;(也称之为有效性)(4)输入:一个算法有0个或多个输入,这些输入取自于某个特定的对象的集合(5)输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的。
17、双向链表: 是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。

18、无序树:树中任意节点的子结点之间没有顺序关系,这种树称为无序树,也称为自由树
19、关键路径(2):从一个源点(入度为0的顶点)到一个汇点(出度为0的顶点)具有最大长度的路径被称为关键路径。
20、(哈希函数)冲突:通常关键字的集合比哈希地址集合大得多,所以经过哈希函数变换后,可能将不同的关键字映射到同一个哈希地址上,这种现象称为冲突。
21、有向完全图:任意两点之间有方向相反的两条边叫有向完全图,若它有n个顶点,则有n*(n-1)条边。
22、:堆是一种特殊的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。只能在一端(称为栈顶(top))对数据项进行插入和删除。
23、线性表:一个线性表是n个具有相同特性的数据元素的有限序列。数据元素是一个抽象的符号,其具体含义在不同的情况下一般不同。
特征:1.集合中必存在唯一的一个"第一元素"。
2.集合中必存在唯一的一个 “最后元素” 。
3.除最后一个元素之外,均有 唯一的后继(后件)。
4.除第一个元素之外,均有 唯一的前驱(前件)。
24、排序:将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序。
(1)分内部排序和外部排序。若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。
(2)假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。
25、最小生成树(2):(1)一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。最小生成树可以用kruskal(克鲁斯卡尔)算法或Prim(普里姆)算法求出。 ​
(2)在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边,而 w(u, v) 代表此边的权重,若存在 T 为 E 的子集且为无循环图,使得 w(T) 最小,则此 T 为 G 的最小生成树。最小生成树其实是最小权重生成树的简称。
26、哈希表的填装因子:哈希表的装填因子α = 填入表中的元素个数/哈希表的长度;α是哈希表装满程度的标志。当哈希表的长度一定时,α与填入表中的元素个数成正比。即α越大,填入的元素越多,产生冲突的概率越大。
27、满二叉树:高度为h,并且由2{h} –1个结点的二叉树,被称为满二叉树。除最后一层无任何子节点外,每一层上的所有结点都有两个子结点二叉树。
28、中序遍历:中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树,若二叉树为空则结束返回
29、抽象数据类型:一个数学模型以及定义在该模型上的一组操作。使用它的人可以只关心它的逻辑特征,不需要了解它的存储方式。
30、递归函数:当函数直接或者间接调用自己时,则发生了递归。
注:以上为华中科技大学2003年至2017年的数据结构考研中术语解释的大致统计,个人参加了2019年的华科大的考研大军,感觉术语重复率极大

按书中章节顺序总结的术语如下

第一章 绪论

1.1什么是数据结构
(1)用计算机解决一个具体问题步骤:
A:从具体问题抽象出一个适当的数学模型;
B:设计一个解此数学模型的的算法;
C:编出程序,进行测试、调整直至得到最终解答。
(2)数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科。
1.2基本概念和术语
(1)数据:对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。如:图像,声音等。
(2)数据元素:数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。有时,一个数据元素由若干个数据项组成。
(3)数据项:数据的不可分割的最小单位。
(4)数据对象:性质相同的数据元素的集合,是数据的一个子集。
(5)数据结构:相互之间存在一种或多种特定关系的数据元素的集合。结构:数据元素相互之间的关系。
根据数据元素之间关系的不同特性,有4类基本结构:
A集合:数据结构中的元素之间除了"同属一个集合" 的相互关系外,别无其他关系;
B线性结构:数据结构中的元素存在一对一的相互关系;
C树形结构:数据结构中的元素存在一对多的相互关系;
D图状结构或网状结构:数据结构中的元素存在多对多的相互关系。
{ 注:数据结构:(1)按某种逻辑关系将一批数据元素组织起来;
(2)按一定的存储方式把它们存储起来;
(3)在数据上定义一个运算集合,就得到(或者说形成)了一个数据结构。
(三个组成成分,数据的逻辑结构,数据的存储结构和数据运算结构。)
数据结构形式定义为:
​ Data_Structure=(D,R)
其中D是数据元素的集合,R是该集合中所有元素之间的关系的有限集合。
}
(6)数据的结构逻辑:各数据元素之间的逻辑关系。大致有两类:线性结构(如线性表)和非线性结构(如树、图)。
(7)数据的存储结构/表示(又称物理结构/表示):数据结构在计算机中的映像。它包括数据元素的表示和关系的表示。
数据之间的关系在计算机中有两种不同的表示方法:
A顺序映像(向量、一维数组):特点是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系。
B非顺序映像(链接表):特点是借助元素存储地址的指针表示数据元素之间的逻辑关系。分配不一定连续的空间。
任何一个算法的设计取决于选定的数据(逻辑)结构,而算法的实现依赖于采用的存储结构。
(8)数据类型:一个值的集合和定义在这个值集上的一组操作总称。分为两类:原子类(不可分解)和结构类型(是由若干成分按某 种结构组成的,不可分解,并且它的成分可以是非结构的,也可以是结构的)。
(9)抽象数据类型(Abstract Data Type ADT):是指一个数学模型以及定义在此数学模型上的一组操作。使用它的人可以只关心它的 逻辑特征,不需要了解它的存储方式。定义它的人同样不必要关心它如何存储。可用三元组(D,S,P)表示。其中,D是数据对象, S是D上的关系集,P是对D的基本操作集。
格式定义:
ADT 抽象数据类型名
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
基本操作:<基本操作的定义>
}ADT 抽象数据类型名
1.3抽象数据类型的表示与实现
抽象数据类型可通过固有数据类型来表示和实现,即利用处理器中已存在的数据类型来说明新的结构,用已经实现的操作来组合新的 操作。

1.4算法和算法分析
(1)算法:对特定问题求解步骤的一种描述,给出了求解一个问题的大致思路和步骤,并不是程序,它是指令的有限序列,其中每一条指令表示一个或多个操作;此外,一个算法还有下列5个重要特性:
A有穷性:在有限步或有限时间之后算法终止。
B确定性:每条指令或步骤都没有二义性,具有明确定义。
C可行性:算法中的操作都是已经实现的基本运算执行有限次来实现。
D输入:有零个或多个输入量。
E输出:至少有一个输出量。
(2)算法设计有求:A正确性 B可读性 C健壮性 D效率与低存储量需求
(3)算法效率的度量:一个算法是由控制结构(顺序、分支、循环)和原操作(指固有数据类型的操作)构成的,则算法的时间取决于两者的综合效果。为了便于比较同一问题的不同算法,通常的做法是,从算法中选取一种对于所研究的问题(或算法类型)来说是基本操作的原操作,以该操作重复执行的次数作为算法的时间度量。
时间复杂度:算法(或程序)中基本操作(或语句)重复执行的次数的总和。设n为求解问题的规模,基本操作(或语句)执行次数总和称为语句频度,记作f(n),执行下面的步骤:去掉f(n)中的所有加法常数,只保留最高阶项。时间复杂度记作T(n),T(n)=O(f(n))。
频度:该语句重复执行的次数。

第二章 线性表

2.1线性表的类型定义
线性表:由n(n>=0)个数据元素(a1,a2,…,an)构成的有限序列。记作L=(a1,a2,…an)。
2.2线性表的顺序表示和实现
线性表的顺序表示(或顺序映像):用一组地址连续的存储单元依次存储线性表中的数据元素。在线性表的顺序 存储结构中, 逻辑上相邻的数据元素在物理位置上也是相邻的。
2.3线性表的链式表示和实现
线性表的链式存储结构:其特点是用一组任意的存储单元存储线性表的数据元素。为了表示每个数据元素与其直接后继元素之间的 逻辑关系,每个元素除了存储本身的信息外,还需要存储指示其直接后继的信息。这两部分信息组成数据元素ai的存储映像,称为 结点,它包含两个域,数据域和指针域n个结点链接成一个链式线性表的结构叫做链表,又由于此链表的每个结点中只包含一个指针 域,故又称线性链表或单链表。
循环链表:循环链表是另一种形式的链式存贮结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。
双向链表:是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结 点开始,都可以很方便地访问它的前驱结点和后继结点。

第三章 栈和队列

3.1 栈
栈: 栈(Stack)又称堆栈,它是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除运算。 由于栈的插入和删除 运算仅在栈顶一端进行,后进栈的元素必定先出栈,所以又把栈称为后进先出表(Last In First Out, 简称LIFO)。
顺序栈(栈的顺序存储结构):是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈 顶 元素在顺序栈中的位置。
栈的链接存储结构:与线性表的链接存储结构相同,是通过由结点构成的单链表实现的,此时表头指针被称为栈顶指针,由栈顶指 针指向的表头结点被称为栈顶结点,整个单链表被称为链栈,即链接存储的栈。
3.3 栈与递归的实现
递归:一个直接调用自己或通过一系列的调用语句间接地调用自己的函数。
3.4 队列
队列:队列(Queue)也是一种运算受限的线性表,它的运算限制与栈不同,是两头都有限制,插入只能在表的一端进行(只进不出), 而删除只能在表的另一端进行(只出不进),允许删除的一端称为队尾(rear),允许插入的一端称为队头 (Front),队列的操作原则是 先进先出的,所以队列又称作FIFO表(First In First Out)。
队列的顺序存储结构:需要使用一个数组和两个整型变量来实现,利用数组来顺序存储队列中的所有元素,利用两个整型变量来分 别存储队首元素和队尾元素的下标位置,分别称它们为队首指针和队尾指针。
队列的链接存储结构:是通过由结点构成的单链表实现的,此时只允许在单链表的表头进行删除和在单链表的表尾进行插入,因此 它需要使用两个指针:队首指针front和队尾指针rear。
双端队列:是限定插入和删除操作在表的两端进行的线性表。
循环队列:为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。 存储在其中的队列称为循环队列(Circular Queue)。

第四章 串

4.1串类型的定义
串(或字符串):是有零个或多个字符组成的有限序列。一般记为 s=’a1a2…an’。其中S是串名,ai(1≦i≦n)是单个,可以是字 母、数字或其它字符。
子串:串中任意个连续的字符组成的子序列,包含子串的串相应地称为主串。
串相等:如果两个串的串值相等(相同),称这两个串相等。换言之,只有当两个串的长度相等,且各个对应位置的字符都相同时才相等。
4.2串的表示和实现
串是一种特殊的线性表,其存储表示和线性表类似但又不完全相同。串的存储方式取决于将要对串所进行的操作。串在计算机中有3 种表示方式:
串的定长顺序存储表示:这种存储结构又称为串的顺序存储结构。是用一组连续的存储单元来存放串中的字符序列。所谓定长顺序 存储结构,是直接使用定长的字符数组来定义,数组的上界预先确定。
串的堆分配存储表示:系统提供一个空间足够大且地址连续的存储空间(称为“堆”)供串使用。可使用C语言的动态存储分配函数 malloc()和free()来管理。特点是:仍然以一组地址连续的存储空间来存储字符串值,但其所需的存储空间是在程序执行过程中动态 分配,故是动态的,变长的。
串的链式存储表示:串的链式存储结构和线性表的串的链式存储结构类似,采用单链表来存储串,结点的构成是:(1)data域:存放字 符,data域可存放的字符个数称为结点的大小;(2)next域:存放指向下一结点的指针。若每个结点仅存放一个字符,则结点的指针域 就非常多,造成系统空间浪费,为节省存储空间,考虑串结构的特殊性,使每个结点存放若干个字符,这种结构称为块链结构。
4.3串的模式匹配算法
串的定位操作通常称作串的模式匹配。

第五章 数组和广义表

5.1数组的定义
数组:数组中各元素具有统一的类型,并且数组元素的下标一般具有固定的上界和下界。任何数组A都可以看作一个线性表。数组维 数确定后,数据元素个数和元素之间的关系不再发生改变,适合顺序存储。
5.4广义表的定义
广义表:是由零个或多个原子或子表组成的优先序列,是线性表的推广。

第六章 树和二叉树

6.1树的定义和基本术语
树:树是一种非线性的数据结构,是由n(n >=0)个结点组成的有限集合。(1)如果n==0,树为空树。(2)如果n>0,树有一个 特定的结点,根结点根结点只有直接后继,没有直接前驱。除根结点以外的其他结点划分为m(m>=0)个互不相交的有限集合,T0, T1,T2,…,Tm-1,每个结合是一棵树,称为根结点的子树。
树的结点:包含一个数据元素及若干指向其子树的分支。
树的度:结点拥有的子树的数量为结点的度,度为0的结点是叶结点,度不为0的结点为分支结点,树的度定义为树的所有结点中 度的最大值。
树的前驱和后继:结点的直接后继称为结点的孩子,结点称为孩子的双亲。结点的孩子的孩子称为结点的孙子,结点称为子孙的祖 先。同一个双亲的孩子之间互称兄弟。
结点的祖先:从根结点到该结点所经分支上的所有结点。

结点的层次:树中根结点为第1层,根结点的孩子为第2层,依次类推。树中结点的最大层次称为树的深度或高度。
树的有序性:如果树中结点的各子树从左向右是有序的,子树间不能互换位置,则称该树为有序树,否则为无序树。
森林:森林是由n棵互不相交的树组成的集合。
6.2二叉树
二叉树:二叉树是一种特殊的顺序树,它规定有左右两个孩子,即左右孩子顺序不能替换,所以二叉树是一种有序树。二叉树的结 点数为大于0小于等于2。
满二叉树:是指深度为K,且有-1个结点的二叉树。特点:(1) 每层上结点数都达到最大;(2) 度为1的结点个数=0,即不存在 分支数为1的结点。
完全二叉树:深度为k,结点数为n的二叉树,当且仅当每个结点的编号都与相同深度的满二叉树中从1到n的结点一一对应时,称 为完全二叉树。
6.3遍历二叉树和线索二叉树
遍历二叉树:按某条搜索路径寻访树中每个结点,使得每个结点均被访问一次,而且仅被访问一次。实际上是对一个非线性结构进 行线性化操作。
线索二叉树:指向结点前驱和后继的指针叫做线索,加上线索的二叉树称之为线索二叉树。
6.6赫夫曼树及其应用
路径长度:从树中一各结点到另一结点之间的分支构成这两个结点之间的路径,路径上的分支数目。
树的路径长度:从树根到每一个结点的路径之和。
树的带权路径长度(WPL):树中所有叶子结点的带权路径之和。
最优二叉树(赫夫曼树):在权为wl,w2,…,wn的n个叶子所构成的所有二叉树中,带权路径长度最小(即代价最小)的二叉树称 为最优二叉树或哈夫曼树。

第七章 图

7.1图的定义和术语
有向图(Digraph):图中每条边都有方向。
无向图(Undigraph):图中每条边都没有方向 。
完全图(Completed graph):有1/2n(n-1)条边的无向图称为完全图。
有向完全图:具有n(n-1)条弧的有向图称为有向完全图。
稀疏图(Sparse graph):有很少条边或弧(如e < nlogn)的图称为稀疏图。
稠密图(Dense graph):有很多条边或弧。
权(Weight):有时图的边或弧具有与它相关的数,这种与图的边或弧相关的数叫做权。
网:带权的图。
度(Degree):定点v的度是和v相关联的边的数目,记为TD(V)。
入度(InDegree):以顶点v为头的弧的数目称为v的入度,记为ID(v)。
出度(Outdegree):以v为尾的弧的数目成为v的出度,记为OD(v)。
回路(环):第一顶点和最后一个顶点相同的的路径。
简单路径:序列中顶点不重复的路径。
连通图(Connected Graph):对于图中任意两个顶点v,j∈V,v和j都是连通的,则称G是连通图。
连通分量(Connected Compenent):无向图中的极大连通子图。
强连通分量:有向图中的极大强连通子图。
生成树:是一个最小连通子图,它包含图中所有顶点,但只有足以构成一棵树的n-1条边。一棵有n个顶点的生成树有且只有n-1 条边,但有n-1条边的图不一定是生成树。
有向树:一个有向图恰有一个顶点的入度为0,其余顶点的入度均为1。
7.3图的遍历
图的遍历:从图中某一顶点出发访问遍图中其余顶点,且使每个顶点仅被访问一次。
深度优先遍历(DFS):从图中某个顶点v出发,访问此顶点,然后从v的未被访问的邻接点出发深度优先遍历图,直至图中所有和 v有路径相通的顶点都被访问到。
广度优先遍历(BFS):类似于树的层次遍历。简单来说,就是从一个顶点v为起始点,由远及近,依次访问和v有路径相通且路径 长度为1,2…的顶点。
7.4图的连通性问题
最小生成树:构造连通网的最小代价生成树。
普里姆(prime):先将一个起点加入最小生成树,之后不断寻找与最小生成树相连的边权最小的边能通向的点,并将其加入最小生 成树,直至所有顶点都在最小生成树中。(O(n
n))
克鲁斯卡尔(kluskal):在剩下的所有未选取的边中,找最小边,如果和已选取的边构成回路,则放弃,选取次小边。(O(eloge))
关节点:假若在删去顶点v以及v相关联的各边之后,将图的连通分量分割成两个或两个以上的连通分量,则称顶点v为该图的一 个关节点。(如果去掉图中某个结点后,剩下的结点无法再构成完整的连通图,那么这个去掉的结点就是关节点。)
重连通图:一个没有关节点的连通图。在重连通图上,任意一对顶点之间至少存在两条路径,则在去掉某个顶点以及附属该顶点的 各边时也不破坏图的连通性。若在连通图上至少删去k个顶点才能破坏连通性,则称此图的连通度为k。
7.5有向无环图及其应用
有向无环图:一个无环的有向图。简称DAG。
拓扑排序:由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。
顶点表示活动的网(AOV—网):用顶点表示活动,用弧表示活动间的优先关系的有向图为AOV网(Activity On Vertex Network)。
边表示活动的网(AOE—网):是一个带权的有向无环边,其中,顶点表示事件,弧表示活动,权表示活动持续的时间。
关键路径:路径长度(路径各活动活动持续时间之和)最长的路径。
最短路径:
1.迪杰斯特拉算法(Dijkstra):把图中的顶点集合V分成两组,第一组为已求出最短路径的顶点集合S(初始时S中只有源节点,以 后每求得一条最短路径,就将它对应的顶点加入到集合S中,直到全部顶点都加入到S中);第二组是未确定最短路径的顶点集合U。
2.弗洛伊德算法(Floyd):A从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。 B对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从 u 到 w 再到 v 比已知的路径更短。如果是更新它。

第九章 查 找

查找表:是由同一类型的数据元素(或记录)构成的集合。
静态查找表:静态查找表在查找的过程中不改变表的状态——不插不删。他适合用于不变动或不常变动的表的查。
动态查找表:在查找过程中同时插入表中不存在的数据元素,或者从查找表中删除已存在的某个数据元素。
关键字:是数据元素(或记录)中某个数据项的值,用它标记(识别)一个数据元素(或记录)。若此关键字可以唯一标识一个记录,则 称此关键字为主关键字。反之,称用一识别若干记录的关键字为次关键字。
查找:根据给定的某个值,在查找表中确定一个其关键字等于给定值的记录或数据元素。
顺序查找:是在一个已知无(或有序)序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与表中的数从最后一个开始逐个 比较,直到找出与给定关键字相同的数为止。
平均查找长度(ASL):为确定记录在查找表中的位置,需和给定值进行比较的关键字个数的期望值称为查找算法在查找成功时的平均查 找长度。对于含有n个数据元素的查找表,查找成功的平均查找长度为:ASL=∑PiCi (i=1,2,3,…,n),可以简单以数学上的 期望来这么理解。其中:Pi 为查找表中第i个数据元素的概率,Ci为找到第i个数据元素时已经比较过的次数。
折半查找:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字, 则在中间记录的左半区继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直 到找到为止。
静态最优查找树:是查找性能达最佳的判定树是其带权内路径长度PH取最小值的二叉树。
二叉排序树:二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
(4)没有键值相等的结点。
平衡二叉树(AVL):平衡二叉树它是一棵空树或要求对于每一个结点来说,它的左右子树的高度之差的绝对值不能超过1,如果插入或 者删除一个结点使得高度之差大于1,就要进行结点之间的旋转,将二叉树重新维持在一个平衡状态。
平衡因子(BF):二叉树上结点的左子树深度减去右子树深度的值。
键树(数字查找树):它是一棵度>=2的树,树中的每个节点中不是包含一个或几个关键字,而是只含有组合关键字的符号。
哈希表:根据设定的哈希函数H(key)和处理冲突的方法将一组关键字映像到一个有限的连续的地址集(区间)上,并以关键字在地址集 中的“像”作为记录在表中的存储位置,这种表称为哈希表。
同义词:映射到同一哈希地址上的关键字称为同义词。
冲突:通常关键字的集合比哈希地址集合大得多,所以经过哈希函数变换后,可能将不同的关键字映射到同一个哈希地址上, 这种现象称为冲突。

第十章 内部排序

10.1排序
排序:是将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列。
10.2插入排序
直接插入排序:是一种最简单的排序方法,其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1 的有序表。
折半插入排序:是对插入排序算法的一种改进,所谓排序算法过程,就是不断的依次将元素插入前面已排好序的序列中。(注:比 直接插入算法明显减少了关键字之间比较的次数,因此速度比直接插入排序算法快,但记录移动的次数没有变,所以 折半插入排序算法的时间复杂度仍然为O(n^2),与直接插入排序算法相同。附加空间O(1)。)
2-路插入排序:是对折半插入排序的改进,其目的是减少排序过程中移动记录的次数,但为此需要n个记录的辅助空间。(注:移 动记录的次数约为(n^2)/8。因此,二路插入排序只能减少移动记录的次数,而不能绝对避免移动记录。并且,当r[0] 是待排序记录中关键字最小或最大的记录时,二路插入排序就完全失去它的优越性。)
希尔排序(又称缩小增量排序):先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接 插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对 全体元素进行一次直接插入排序。
10.3快速排序
快速排序:通过一趟排序将待排序记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对 这两部分继续进行排序,以达到整个序列有序。
10.4选择排序
选择排序:每一趟在n-i+1(i=1,2…,n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录交换之。
简单选择排序:设所排序序列的记录个数为n。i取1,2,…,n-1,从所有n-i+1个记录(Ri,Ri+1,…,Rn)中找出排序码最小的记录,与 第i个记录交换。执行n-1趟 后就完成了记录序列的排序。
树形选择排序:是一种按照锦标赛的思想进行选择的排序方法,首先对n个记录进行两两比较,然后优胜者之间再进行两两比较, 如此重复,直至选出最小关键字的记录为止。
堆排序:由二叉堆的定义可知,堆顶元素(即二叉堆的根节点)一定为堆中的最大值或最小值,因此如果我们输出堆顶元素后,将剩 余的元素再调整为二叉堆,继而再次输出堆顶元素,再将剩余的元素调整为二叉堆,反复执行该过程,这样便可输出一个有 序序列,这个过程我们就叫做堆排序。
10.5归并排序
归并排序:归并排序就是通过将一个具有n个key记录的线性表,看成是具有n个有序子序列的排序叠加来实现对原有序列的排序的一种算法。它的中间状态就是将所有的子序列长度变为1,再将它们两两进行归并,得到长度为2或1的次级子序列,之后再进行两两归并,如此反复,直到得到一个长度为n的有序序列。
10.6基数排序
基数排序:基数排序是一种借助多关键字排序思想对单关键字进行排序的方法,它是借助“分配”和“收集”2种操作对单关键字进行排序的。

原word文档如下:
链接:https://pan.baidu.com/s/1XfkBlRIQY443OmfSTndQpw
提取码:f56k
个人的一点小总结,希望对需要的人有所帮助。如有错误,还望指正。

你可能感兴趣的:(2019年1月)