有向无环图

DAG及拓扑排序

喜你入骨 提交于 2019-12-04 09:33:17
1.有向无环图和拓扑排序 有向无环图( Directed Acyclic Graph,简称DAG );拓扑排序指的对DAG一个有序的线性排列。 https://github.com/WuYiMi/Myrepository/blob/master/DS/Graph.java 来源: https://www.cnblogs.com/lbrs/p/11854044.html

Uva11762 Race to 1——有向无环图&&记忆化搜索

半城伤御伤魂 提交于 2019-11-30 01:28:46
题意 给出一个整数 $N$,每次可以在不超过 $N$ 的素数中等概率随机选择一个 $P$,如果 $P$ 是 $N$ 的约数,则把 $N$ 变成 $N/P$,否则 $N$ 不变。问平均情况下需要多少次随机选择,才能把 $N$ 变成1呢? 分析 本题可以画出一个状态转移图, 例如 $n=6$ 时, $n$ 的每个约数都对应一个状态,每个状态转移都有一定概率,从每个状态出发转移的概率和为1. 设 $f(i)$ 表示当前的数为 $i$ 时接下来需要选择的期望次数,可列出方程: $$f(6) = 1 + f(6)/3 + f(3)/3 + f(2)/3$$ 一般地,设不超过 $x$ 的素数有 $p(x)$ 个,其中有 $g(x)$ 个是 $x$ 的因子,则 $$f(x) = 1 + f(x) \times [1 - \frac{g(x)}{p(x)}] + \sum_{x | y} \frac{f(x/y)}{p(x)}$$ 即 $$f(x) = \frac{\sum _{x|y}f(x/y) + p(x)}{g(x)}$$ 边界为 $f(1)=0$,因为 $x/y < x$(即形成的是有向无环图),可以用记忆化搜索的方式 计算 $f(x)$,否则就要用高斯消元了。 #include<bits/stdc++.h> using namespace std; //返回n以内素数的个数 /

有向无环图之拓扑排序——贪心算法

若如初见. 提交于 2019-11-28 08:18:17
文章目录 1. 有向无环图(DAG) 2. 拓扑排序 2.1 拓扑排序的概念 2.2.拓扑排序的基本思想 3.拓扑排序的实现 3.1 有向图的邻接表实现 3.1.1 图的邻接表存储 3.1.2 邻接表的拓扑排序 3.2 有向图的邻接矩阵实现 3.2.1 图的邻接矩阵存储 3.2.2 邻接矩阵的拓扑排序 3.3 测试用例 3.4 基于深度优先的拓扑排序 参考资料 拓扑排序 主要可以判断 有向无环图(DAG) 中是否存在 环路 ,其可以用来判断一个有着先后关系的工程能否顺利进行。 1. 有向无环图(DAG) 一个不存在环路的有向图称作 有向无环图(Directed Acycline Graph) ,简称DAG图。 判断一个图是否存在环路可以有以下两种思路: 对于无向图,若深度优先遍历过程中遇到回边(即指向已经访问过的顶点的边),则必存在环路; 对于有向图,可以构造其顶点的拓扑排序序列,若图中所有顶点都在它的拓扑排序序列中,则必不存在环路; 2. 拓扑排序 2.1 拓扑排序的概念 **拓扑排序(Topological Sort)**即由一个集合上的一个偏序得到该集合上的一个全序。 (偏序是值集合中仅有部分成员之间可比较,而全序指集合中全体成员之间均可比较) 2.2.拓扑排序的基本思想 拓扑排序的算法如下: 1)在有向图中选择一个没有前驱(入度为0)的顶点输出; 2