拓扑排序基础 拓扑排序用于解决有向无环图(DAG,Directed Acyclic Graph)按依赖关系排线性序列问题,直白地说解决这样的问题:有一组数据,其中一些数据依赖其他,问能否按依赖关系排序(被依赖的排在前面),或给出排序结果. 最常用解决拓扑排序问题的方法是Kahn算法,步骤可以概括为: . 根据依赖关系,构建邻接矩阵或邻接表.入度数组 . 取入度为0的数据(即不依赖其他数据的数据),根据邻接矩阵/邻接表依次减小依赖其的数据的入度 . 判断减小后是否有新的入度为0的数据,继续进行第2…
拓扑排序基础 拓扑排序用于解决有向无环图(DAG,Directed Acyclic Graph)按依赖关系排线性序列问题,直白地说解决这样的问题:有一组数据,其中一些数据依赖其他,问能否按依赖关系排序(被依赖的排在前面),或给出排序结果. 最常用解决拓扑排序问题的方法是Kahn算法,步骤可以概括为: . 根据依赖关系,构建邻接矩阵或邻接表.入度数组 . 取入度为0的数据(即不依赖其他数据的数据),根据邻接矩阵/邻接表依次减小依赖其的数据的入度 . 判断减小后是否有新的入度为0的数据,继续进行第2…
概念 很多问题都可转化为图, 利用图算法解决 例如早餐吃薄煎饼的过程 制作松饼的难点在于知道先做哪一步.从图7-18可知,可以首先加热平底锅或者混合原材料.我们借助拓扑排序这种图算法来确定制作松饼的步骤. 从工作流程图得到工作次序排列的算法,称为"拓扑排序" 拓扑排序处理一个DAG(向无环图), 输出顶点的线性序列使得两个顶点v,w,如果G中有(v,w)边,在线性序列中v就出现在w之前. 拓扑排序广泛应用在依赖事件的排期上,还可以用在项目管理. 数据库查询优化和矩阵乘法的次序优化上 算…
2018-05-02 16:26:07 在计算机科学领域,有向图的拓扑排序或拓扑排序是其顶点的线性排序,使得对于从顶点u到顶点v的每个有向边uv,u在排序中都在v前.例如,图形的顶点可以表示要执行的任务,并且边缘可以表示一个任务必须在另一个任务之前执行的约束; 在这个应用中,拓扑排序只是一个有效的任务顺序. 如果且仅当图形没有定向循环,即如果它是有向无环图(DAG),则拓扑排序是可能的. 任何 DAG 具有至少一个拓扑排序,并且已知这些算法用于在线性时间内构建任何 DAG 的拓扑排序. u {\…
BFS基础 广度优先搜索(Breadth First Search)用于按离始节点距离.由近到远渐次访问图的节点,可视化BFS 通常使用队列(queue)结构模拟BFS过程,关于queue见:算法与数据结构基础 - 队列(Queue) 最直观的BFS应用是图和树的遍历,其中图常用邻接表或矩阵表示,例如 LeetCode题目 690. Employee Importance: // LeetCode 690. Employee Importance/* class Employee { publi…
图基础 图(Graph)应用广泛,程序中可用邻接表和邻接矩阵表示图.依据不同维度,图可以分为有向图/无向图.有权图/无权图.连通图/非连通图.循环图/非循环图,有向图中的顶点具有入度/出度的概念. 面对图相关问题,第一步是将问题转为用图表示(邻接表/邻接矩阵),二是使用图相关算法求解. 相关LeetCode题: 997. Find the Town Judge  题解 1042. Flower Planting With No Adjacent  题解 图的遍历(DFS/BFS) 图的遍历/搜索…
分治法基础 分治法(Divide and Conquer)顾名思义,思想核心是将问题拆分为子问题,对子问题求解.最终合并结果,分治法用伪代码表示如下: function f(input x size n) if(n < k) solve x directly and return else divide x into a subproblems of size n/b call f recursively to solve each subproblem Combine the results…
贪心基础 贪心(Greedy)常用于解决最优问题,以期通过某种策略获得一系列局部最优解.从而求得整体最优解. 贪心从局部最优角度考虑,只适用于具备无后效性的问题,即某个状态以前的过程不影响以后的状态.紧接下来的状态仅与当前状态有关.和分治.动态规划一样,贪心是一种思路,不是解决某类问题的具体方法. 应用贪心的关键,是甄别问题是否具备无后效性.找到获得局部最优的策略.有的问题比较浅显,例如一道找零钱的题目 LeetCode 860. Lemonade Change: // 860. Lemonad…
数组基础 数组是最基础的数据结构,特点是O(1)时间读取任意下标元素,经常应用于排序(Sort).双指针(Two Pointers).二分查找(Binary Search).动态规划(DP)等算法.顺序访问数组.按下标取值是对数组的常见操作. 相关LeetCode题: 905. Sort Array By Parity  题解 922. Sort Array By Parity II  题解 977. Squares of a Sorted Array  题解 1150. Check If a…
拓扑排序(Topological Sorting) 一.拓扑排序 含义 构造AOV网络全部顶点的拓扑有序序列的运算称为拓扑排序(Topological Sorting). 在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列. 且该序列必须满足下面两个条件: ①每个顶点出现且只出现一次. ②若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面. 注:有向无环图(…