图(Graph)
图是什么?(What is a graph)
图模拟一组链接。
A graph models a set of connections.
图(Graph)由节点(node)和边(edge)组成。
一个节点可能与众多节点直接相连,这些众多节点被称为邻居(neighbors)
A node can be directly connected to many other nodes. Those nodes are called its neighbors.
Graphs are a way to model how different things are connected to one another.
有向图(directed graph): 图中的关系有指向性的,用箭头表示,其中的关系是单向的。
无向图(undirected graph):图中的关系是没有箭头表示,直接相连的节点互为邻居
实现图
图由多个节点组成。每个节点都与邻近节点相连,如何表示类似于”你 -> Bob“这样的关系呢?我们可以用散列表(hash table)来实现,因为散列表可以将键映射到值上。
广度优先搜索(Breadth First Search)
广度优先搜索是一种用于图的查找算法。
可以帮助解决两大类问题
- 从节点A出发,有前往节点B的路径吗?
- 从节点A出发,前往节点B的哪条路径最短?(shortest-path-problem)
举个例子:
你 -> 你的朋友 -> 你朋友的朋友
在这里你的朋友你直接可以找到,称为一度关系。朋友的朋友需要你经过朋友这一层关系来找到称为 二度关系, 依次类推。
我们要先查找完一度关系再查找二度关系,按顺序进行检查,通常用队列(queue)这种FIFO的数据结构来实现。
实现思路
- 用队列维护按度排查的关系
- 标记排查完的元素,防止死循环
- 直到找到结果
时间复杂度
O(V + E),其中V为顶点(vertice)数, E 为边数。