数据结构笔记20-37

一起学习计算机的个人空间-一起学习计算机个人主页-哔哩哔哩视频

目录

 图的定义和术语

邻接矩阵

邻接表画法

十字链表画法

 邻接多重表画法

图的广度优先遍历

图的深度优先遍历

最小生成树-Prim算法

最小生成树-Kruskal算法

 最短路径-Dijkstra算法

最短路径-Floyd算法 

拓扑排序和逆拓扑排序

AOE网中的关键路径 略

折半查找法的平均查找长度

 分块查找及平均查找长度

平衡二叉树的调整 

红黑树的概念 B树 略

散列表处理冲突方法


 图的定义和术语

 

邻接矩阵

无向图的邻接矩阵特点:

以黑色对角线为分割,右上和左下是以黑线对称的

有向图的邻接矩阵特点:

1.以行来写

 2.看元素的出度有多少,看行(红色)

看元素的入度有多少,看列(黑色)

有权图的邻接矩阵特点: 

和 有向图的邻接矩阵特点一样,并且如果没有出度的地方填无穷大

邻接表画法

无向图的邻接表: 

结束的地方,指针空格处填“/” 

有向图的邻接表:  

 

十字链表画法

1.

V1,V2,V3,V4的编号分别为0,1,2,3

先看第一行:V1出发,与V2,V3相连,且V1编号为0,因此为01,02,结束时写个结束符^

 看第二行:V2出发,没有与之相连的V,因此直接写结束符

看第三行:V3出发,与V4,V1相连,且V3编号为2,因此为21,23,结束时写个结束符^

以此类推

2.先看V1,把V1后面的空格当作起点,找其他V后面小尾巴上有编号为0的后面的空格,然后按照V2,V3,V4依次找有没有符合要求的)连起来

先看V2,把V2后面的空格当作起点,找其他V后面小尾巴上有编号为1的后面的空格,然后(按照V1,V3,V4依次找有没有符合要求的)连起来

以此类推

(都按顺序来看,V1看完看V2,这样标准)

 邻接多重表画法

 并且,将用完的线去掉。

接着,再看哪个节点连接的多,那就先画哪个节点

这里的V3连接的多,那就先画V3

以下这一步就和十字链表画法一样(我这里直接摘抄了十字链表画法) 

 

 

图的广度优先遍历

与树类似

abcdef

图的深度优先遍历

类似贪心算法,走到哪步就访问哪步,并且访问过的就不再访问

呜呜回忆录!

进阶数据结构和算法-230-图-DFS_哔哩哔哩_bilibili

 

最小生成树-Prim算法

 和1相邻的2,8中,1和2之间的距离更近,因此选择2

 在1和2可以触及的边中,权重为8的最小(连过的边,这里是4,就不用管了)这里有两条,任选一条就好

 在1和2和8可以触及的边中,权重为1的最小(连过的边,这里是4,8,就不用管了)

注意:不要连出环了,因为Prim算法本质是生成树!! 

比如以下,按权重最小应该是连接9和7,但是如果连接9,7的话,就会生成环,所以不能这样连。

同理,连接9,8和连接9,3也是会生成环,所以只能连接4和5

从权重最小的开始看,看有没有环

最小生成树-Kruskal算法

在所有权重中,1最小,连接7,8

已连接的线去掉

 

在所有权重中,2最小,连接9,3,连接6,7

已连接的线去掉

......

.....

.....

到这一步的时候,场上权重最小的是6.但是如果连接6的话,就会形成环,因此不能连接

那就看权重第二小的7,这里可以连接3,4但是不可以连接8,9.因为连接8,9会形成环

 最短路径-Dijkstra算法

12.23_黑马数据结构与算法笔记Java-CSDN博客

最短路径-Floyd算法 

 

拓扑排序和逆拓扑排序

选择无入度的顶点,1,并擦去1出发的箭头

 

现在没有入度的就是2和3 随便选一个,这里选了2,并擦去2出发的箭头

现在没有入度的就是5和3 随便选一个,这里选了3,并擦去3出发的箭头

以此类推 

 

出度改为入度,其他不变

AOE网中的关键路径 略

折半查找法的平均查找长度

1.画树,(1+12)/2,取整,为6.以6为根节点 

 

(1+5)/2 =3,取3  (其实就是取中间的数,若中间的数有两个,则取靠左的数)

 

3.画完树之后,补充空白的儿子。空白的为查找失败的点 

 4.算数。

成功的平均查找长度=(层数*所对应层的节点数(蓝色圈))/总共的节点数(蓝圈数)

失败的平均查找长度=((层数-1)*所层数的节点数(黄色框))/总共的节点数(黄色框)

 分块查找及平均查找长度

平衡二叉树的调整 

 

继续加入新的节点,又产生不平衡了

红黑树的概念 B树 略

散列表处理冲突方法

线性探测法

mod7之后,有位置就放入,没位置就后一位放,再没位置就是再后一位放 

平方探测法

mod7之后,有位置就放入,没位置就后一位放,或者前一位(1的平方,负(1的平方))  。再没位置就是往后或者往前四位(2的平方,负(2的平方))  

双散列法

mod7之后,有位置就放入,没位置就mod11

然后将结果相加,若有位置就放入,没位置再说

举个例子

23mod7 =2

23mod11  + 1 =2

2+2 = 4

4没有元素,放入 

若4有元素,放不了,那就

令i=1 ,0+1*4 = 4

还是有冲突

令i=2 ,0+2*4 = 8

没有冲突,可以放入

  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值