图&拓扑排序
michaelbinwang
这个作者很懒,什么都没留下…
展开
-
有向/无向图的基本性质和操作
1. LeetCode上很多算法题目都可以抽象成 “图” ,比如搜索类,tree类,迷宫问题,矩阵path问题等。2. BFS和DFS比较DFS 和 BFS 的比较BFS 的time, space占用都以 branching factor为底, 到解的距离d为指数增长;空间占用上 Queue 是不会像 DFS 一样只存一条path的,而是从起点出发越扩越大,因此会有空间不够转载 2016-11-30 05:20:55 · 1401 阅读 · 0 评论 -
拓扑排序DFS做法
(1) 给定一个有向图,在拓扑排序中可以有很多个正确解,由若干小段的 list 组成。(2) 正确的单序列顺序(具体到一个list之间的元素)。(3) 正确的全序列顺序(list彼此之间的顺序,可以有多个)e.g.,以下图为例,不论先从哪个点开始 DFS,例如 dfs(belt)会得到一个 belt -> jacket 的 list; 但同时因为 pants ->转载 2016-11-30 05:40:01 · 666 阅读 · 0 评论 -
拓扑排序的BFS做法
无论是 directed 还是 undirected Graph,其 BFS 的核心都在于 "indegree",处理顺序也是从indegree 最小的开始。算法如下:1) 先用一个 HashMap 统计下所有节点的 indegree; (值越高的,在拓扑排序中位置也就越靠后,因为还有 N = current indegree 的 parent node 们没有处理完。)转载 2016-11-30 06:24:56 · 500 阅读 · 0 评论 -
无向DFS遍历
无向图的 DFS 要注意避免 “原路返回” 的情况仅仅依靠设 state = 1 是不行的,所以 dfs 里最好有个参数,代表 “前一个节点”,这样在下一步的搜索中可以直接跳过,又避免了误判有环。public class Solution { public boolean validTree(int n, int[][] edges) { int[] sta转载 2016-12-06 05:47:27 · 326 阅读 · 0 评论 -
Undirected Graph BFS/DFS
无向图BFSClone Graph(1) BFS无向图需要有一个set visted,为什么树没有?因为图中可能会重复访问(又回去)。每次我们只考虑set中没有的node:注意,需要一个queue一个set,其它和bfs一个tree一样的。(2) hashmap这里主要是用于加快访问速度O(1),每次不用去list里面重新找node。(1) DFS做法:每次转载 2017-01-12 10:27:13 · 354 阅读 · 0 评论 -
Course Schedule I&II
Course Schedule这题的本质就是,给你一个代表 graph 的 adjacency array,判断 graph 是否有环。其实和 Graph Valid Tree 非常像。DFS 找环性能优异,DFS找环相当于在DFS的基础上加个visited数组,每次访问某个点的时候判断该点的visit数值,如果为0表示没有被访问过,1表示有环,2表示访问完成。public cla转载 2016-11-30 11:05:51 · 282 阅读 · 0 评论 -
无向图如何检测Cycle?
如何正确 detect cycle?用 int[] 表示每个点的状态,其中0 代表“未访问”;1 代表“访问中”;2 代表“已访问”;如果在循环的任何时刻,我们试图访问一个状态为 “1” 的节点,都可以说明图中有环。如何正确识别图中 connected components 的数量?添加任意点,探索所有能到达的点,探索转载 2016-12-06 04:45:14 · 1371 阅读 · 0 评论