图&拓扑排序
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 · 1586 阅读 · 0 评论 -
拓扑排序DFS做法
(1) 给定一个有向图,在拓扑排序中可以有很多个正确解,由若干小段的 list 组成。 (2) 正确的单序列顺序(具体到一个list之间的元素)。 (3) 正确的全序列顺序(list彼此之间的顺序,可以有多个) e.g., 以下图为例,不论先从哪个点开始 DFS,例如 dfs(belt)会得到一个 belt -> jacket 的 list; 但同时因为 pants ->转载 2016-11-30 05:40:01 · 755 阅读 · 0 评论 -
拓扑排序的BFS做法
无论是 directed 还是 undirected Graph,其 BFS 的核心都在于 "indegree",处理顺序也是从 indegree 最小的开始。 算法如下: 1) 先用一个 HashMap 统计下所有节点的 indegree; (值越高的,在拓扑排序中位置也就越靠后,因为还有 N = current indegree 的 parent node 们没有处理完。)转载 2016-11-30 06:24:56 · 585 阅读 · 0 评论 -
无向DFS遍历
无向图的 DFS 要注意避免 “原路返回” 的情况 仅仅依靠设 state = 1 是不行的,所以 dfs 里最好有个参数,代表 “前一个节点”,这样在下一步的搜索中可以直接跳过,又避免了误判有环。 public class Solution { public boolean validTree(int n, int[][] edges) { int[] sta转载 2016-12-06 05:47:27 · 438 阅读 · 0 评论 -
Undirected Graph BFS/DFS
无向图BFS Clone 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 · 444 阅读 · 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 · 363 阅读 · 0 评论 -
无向图如何检测Cycle?
如何正确 detect cycle? 用 int[] 表示每个点的状态,其中 0 代表“未访问”; 1 代表“访问中”; 2 代表“已访问”; 如果在循环的任何时刻,我们试图访问一个状态为 “1” 的节点,都可以说明图中有环。 如何正确识别图中 connected components 的数量? 添加任意点,探索所有能到达的点,探索转载 2016-12-06 04:45:14 · 1622 阅读 · 0 评论
分享