有向/无向图的基本性质和操作

Graph是非常重要而涵盖很广的内容,以至于单独的图论研究方向。LeetCode上很多问题都可以抽象成图,比如搜索类问题,树问题,迷宫问题,矩阵路径问题等。

  • BFS的时间空间占用以braching factor为底,到解的距离d为指数增长;空间上Queue是不会像DFS只存一条路径的,而是从起点出发越扩越大,因为会有空间不够的风险,空间占用为O(b^d)。
  • DFS的时间占用是以branching factor为底,树的深度m为指数增长;而空间占用上,却只是O(bm),可视化搜索过程中只把每个Node的所有子节点存在Stack上,搜索完了再pop出来接着探,因此存储节点数为O(bm)。

可以看到无论BFS还是DFS,树的branching factor都是对空间与时间复杂度影响最大的参数。除此之外,BFS最重要的是到解的距离,而BFS看从当前节点的深度。普遍来说,DFS空间上会经济一些,当然也要分情况讨论。

Topological Sorting,拓扑排序,是graph搜索中的特殊的一种顺序,本质上还是完全可以靠BFS/DFS解决。

results matching ""

    No results matching ""