老白的算法笔记 - 图(Graph)

685 阅读2分钟

图(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的数据结构来实现。

实现思路

  1. 用队列维护按度排查的关系
  2. 标记排查完的元素,防止死循环
  3. 直到找到结果

时间复杂度

O(V + E),其中V为顶点(vertice)数, E 为边数。