数据库工程师基础学习3---图,图相关算法,排序与查找算法

1,图
在这里插入图片描述
在树的概念中,一个节点只能与一个父节点,与若干个子节点产生联系,不可以与两个父节点,或者兄弟节点产生联系.
为了解决上述问题,就引出了图的概念.
在这里插入图片描述
这里e里存放的是5条边的信息.
在这里插入图片描述
有向图的集合用<>表示,并且<1,4>与<4,1>不同.
在这里插入图片描述
在这里插入图片描述
注意:无向图用()表示
在这里插入图片描述
在这里插入图片描述
教材98页
在这里插入图片描述
度就是每个节点有几条边,不区分方向
出度和入度,才会区分方向.节点1的出度为3,入度为1
路径:对于无向图,如果两个节点之间,可以连通就叫路径并且路径上边的条数,为路径长度.(135的路径长度为2,1235的路径长度为3)
对于有向图,路径是有方向的.如2到4就没有路径.
在这里插入图片描述

子图概念,v’和e’都是v和e的子集.
连通图:对于无向图来说的,指的是任意两个节点之间都有路径,都是连通的.
强连通图:对于有向图来说的,指的是有向图任意两个节点之间都有路径,都是连通的.(注意这里不一定要求有直接的一步路径,只要能到达就好了)
网:网是边带权值的图.
在这里插入图片描述
图在内存中用矩阵来存储,注意这里不是相乘,就是按右边矩阵进行存储.
这样就可以存储有向图的每一条边.
在这里插入图片描述
对于无向图,这个存储矩阵是对称的.
在这里插入图片描述
前面的图,只要表示出线段就可以表示出整个图,但是网还带有权值.
在这里插入图片描述
注意不是节点带有权值,而是线段带有权值.
在这里插入图片描述
第二种图表示方法.
在这里插入图片描述
具体的无向图邻接链表表示法如上.
左边部分为表头节点.其中存储每个节点的信息.并指向下一个有路径的节点.
右边部分就是表节点,连接起所有与表头节点对应的节点.(对于网来说,还需要一部分来表示权值.)
可以理解为,表头节点就表示节点.
表节点表示边.这里是将一条线表示了两次
在这里插入图片描述
对于有向图,就表示从节点流出的弧,很好理解.
在这里插入图片描述
这里还有逆邻接表,表示的是:从一个节点流入的弧.
在这里插入图片描述
这里的表节点就可以互换位置的.因为先写哪条边都无所谓.

2,排序算法
教材102
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
直接插入排序,是从无序序列中取出一个数,插入有序序列中.那么这个时间复杂度应该也是o(n方)
在这里插入图片描述
在这里插入图片描述
冒泡排序的思想是第一次把最大的数放在最后.最坏时间复杂度同样是o(n方)
在这里插入图片描述
这个简单选择排序,与插入排序思想相反,插入排序是操作有序序列,从短序列逐渐生成整个序列.
选择排序是操作无序序列,选出其中的最小值,放在有序序列中.
时间复杂度当然也是o(n)
在这里插入图片描述
在这里插入图片描述
希尔排序的思想就是先分组进行插入排序,再合并起来,最后进行一次插入排序.希尔排序的最坏时间复杂度任然是o(n方)但是平均时间复杂度比较低.
在这里插入图片描述
快速排序
在这里插入图片描述
在这里插入图片描述
这里注意,在快排中,不动的那个指针,一定指向的是查找的元素(39)
这是一趟快速排序,之后用递归思想继续对左右两个序列进行快速排序.
快速排序的最坏时间复杂的是o(n方),但是平均时间复杂度会低一点.
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
就是说,任意一个节点的关键字都同时小于(或大于)左右孩子的关键字
在这里插入图片描述
就是每次都拿出最小或者最大的元素.是简化了时间复杂度
在这里插入图片描述
这个算法不再像之前的算法,将大的数列拆分,而是进行合并.
在这里插入图片描述
在这里插入图片描述
3,查找算法
在这里插入图片描述
在这里插入图片描述
查询就是看一个元素是否在表中,检索是查找相关信息.
这里的关键字就是:给某一个数据一个代号的感觉.这个数据不仅仅是1,2这种简单的数字
在这里插入图片描述
在这里插入图片描述
这种查找方法需要关键字是有序排列的.
在这里插入图片描述
最大查找次数就是树的深度.
在这里插入图片描述
这种方法虽然不会加快第一次寻找数据的速度,但是在第一次寻找过后,就可以建立二叉树,方便后面的查找.
这种查找方式的最坏情况下时间复杂度为o(n).
在这里插入图片描述
块之间的顺序,是第一块的所有元素都比第二块的小,以此类推.
在这里插入图片描述
这里我们需要设置一个索引表,先索引到每一个块内,再进行顺序查找.
在这里插入图片描述
在这里插入图片描述
哈希查找的思想是:用哈希函数,将关键码转化为对应的地址信息,如哈希函数是对3取余,那么关键字3就放在0的地址中,直接从对应地址取值是很快的.
这种思想的两个问题就是:哈希函数的构造,和可能有多个关键字对应一个地址的情况.
在这里插入图片描述
这种方法的意思是:发生冲突后,就将发生冲突的这个数(如对3取余时候的6),6与3冲突,后移6,第一种方法是,线性移动,哪里有位置放在哪里,并且记录下该增量.
第二种是移动正负平方位置,第三种是随机的.
在这里插入图片描述
这个例子就是有冲突就向后移动,找最近的空存储空间
在这里插入图片描述
.前面的开发定址法可能会产生数据集中在一片的情况.就用链地址法,
在这里插入图片描述
如上图的例子,区别在于,哈希地址放的不再是关键字,而是一个节点,这个节点的数据区放关键字,指针区指向冲突的下一个关键字.
寻找数据时,代入哈希函数,指针为空,说明数据不在表中.

先构建哈希表,再进行查找的方法就叫做哈希查找.
很明显对于,第一种开放定址法,查找规则也需要与增量方法构造保存一致.

4,图的相关算法
在这里插入图片描述
在这里插入图片描述
生成树其实有两个要求:1,包含图的所有顶点2,是一颗树.
在这里插入图片描述
注意最小生成树可能不只一颗.
在这里插入图片描述
首先介绍,生成最小生成树的第一种算法:普利姆算法
首先,任选一个顶点(例中为a),找到这个顶点到其他顶点的最短路径,选权值最小的顶点加进来.(例子中a到b最短为6,a到c最短为1,a到d最短为5,a到e最短为7,a到f最短为5)所以我们将c加入最小生成树中,然后我们把a,c看成一个整体,找到路径权值最小的顶点.(到b为5.到d为5,到e为6,到f为4)所以将f即对应边加入树中,再将a,c,f看成一个整体.直到将每个顶点都走一次.
在这里插入图片描述
第二种算法:克鲁斯卡尔算法.以边为主
首先找到权值最小的边,例子中为1,就将a,c以及这条边加入树中,再找到剩下的权值最小的边为2,加入树中,以此重复.
注意,有相同权值时,必须避免形成回路.在所有顶点连通起来时结束.

书上第三章剩下的内容(125以后),了解.

5,真题
在这里插入图片描述
这里从题中可以得到,二维数组是个方阵,并且从1开始编号.
在这里插入图片描述
本题选b,很明显其他的都是错的.
在这里插入图片描述
第二题,对于三对角矩阵的aij前元素个数的公式为:3(i-1)-1+j-i+1,但是在本题中,A的i,j从0开始变化,所以公式就变成了3(i)-1+j-i+1,这么多个元素,那么由于B的编号是从1开始,所以最后k的值还要加1,所以为2i+j+1

从这道题可以看出,计算这种题目分两步,首先计算出前面有多少个元素
第二步,计算出aij的编号(从0开始,就和第一步数字相同,从1开始就需要多加1)

选c在这里插入图片描述
第一题选b
第二题超纲,不做
第三题的意思是:必须按照x,y,z的顺序进栈,但是可以在中途出栈.如a选项就是x进x出,y进y出,就可以得到.那么对于c选项,z最先出栈,那么x,y都已经进栈了,所以必须是y,x的顺序出栈,所以选c.
第四题,选d,顺序表可以随机访问,但是单链表不行.
在这里插入图片描述
第一题,b树是一个了解内容.a选项,根节点只要一个,不可能保存那么多信息.
b树的特征是每一个节点保存的关键字个数不确定(可以是1,2,3等等),但是保存一个关键字,就跟一个指针区域.并且根节点至少有两颗子树.
所以c,d是错误的,因为个数不确定.b正确说明b树的叶子节点一定都在最底层.

第二题,选c
在这里插入图片描述
第一题,选c,有向图的矩阵如果是对称的,就需要每一条弧都是双向的.显然不符合题目.

第二题,选a,首先这个数组是有序的,就可以用二分查找法,二分查找法的效率最高,哈希查找法其次.
在这里插入图片描述
第一题选c,b,d,这里注意栈只能从一端进行访问.
第二题选a
第三题选c,霍夫曼树(哈夫曼树)表示叶子节点的权值与路径乘积相加最短.就是最优二叉树.
第四题选b,注意有序排列.

在这里插入图片描述
答案为b,a,b,c,b,d
在这里插入图片描述
其中第二题,选择排序不稳定,如上图,第一个5与2交换后,就改变了两个5之间的次序.
另外堆排序,简化的思想是,插入元素时与根节点比较,而不与兄弟节点比较,所以时间复杂度简化为o(nlog2n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值