什么是图?[面试5.0]
图是一组顶点和一组能将两个顶点连接的线(也称为边)组成的
自环: 即两个顶点就是自己
平行边: 连接两个顶点的两条边(连接同一对顶点的两条边)
概念了解:
拓扑排序
最短路径
联合查找算法
重点了解:
环的检测: 有向图,无向图
二部图(二分图)的检测,树的检测
图的遍历: 深度优先,广度优先
图的储存和表达方式: 邻接矩阵, 邻接链表
什么是有向图?[面试5.0]
两个顶点的边是有方向的图
出度:
一个顶点指出的边的个数
入度:
指向某个顶点的边的个数
有向路径:
由有向的顶点组成
有向环:
起点和终点相同的有向路径
什么是二分图?[面试5.0]
二分图也叫二部图,是指将图分为两组顶点,单组顶点互不相连,两组顶点之间有边相连
二分图的检测:
一般通过遍历的方式对图进行染色标记,将节点依次置为对立色,遍历完后发现:每条边都连接者对立色的话,就算检测成功
邻接矩阵的数据结构?[面试5.0]
底层是一个二维数组,二维数组的索引来表示顶点,横向和纵向的值来表示边
判断横向和纵向确定的值为1时,表示这两个索引顶点之间存在边
邻接矩阵的缺点:
邻接矩阵储存的空间复杂度为V^2,若顶点特别多,内存空间占用大
如果有(V个顶点)->查找单个顶点的邻居时需要O(V)的时间,查找整个矩阵需要O(V^2)的时间
邻接表的数据结构?[面试5.0]
底层是一个数组,每个数组元素储存一个队列,数组的索引来表示顶点,队列表示和该索引之间的边
如果有(V个顶点,E条边)->所有顶点的时间为O(v),查找所有顶点的邻居的时间为O(E),总的时间复杂度是O(V+E)
图怎么搜索?[面试5.0]
深度优先搜索:
若一个节点由兄弟节点也有子节点,那么先找子节点,若有节点被搜索过了就跳过
广度优先搜索:
若一个节点由兄弟节点也有子节点,那么先找兄弟节点,若有节点被搜索过了就跳过
和树的层序遍历是相似的