目录
图的定义和术语
邻接矩阵
无向图的邻接矩阵特点:
以黑色对角线为分割,右上和左下是以黑线对称的
有向图的邻接矩阵特点:
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
图的深度优先遍历
类似贪心算法,走到哪步就访问哪步,并且访问过的就不再访问
呜呜回忆录!
最小生成树-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算法
最短路径-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
没有冲突,可以放入