减治法在求解拓扑排序问题中的应用

拓扑排序:对于一个有向无环图来说,如果我们能够按照次序列出顶点,使得对于每条边来说,边的起始顶点总是排在边的结束顶点之前,那么这个过程就称为拓扑排序,拓扑排序有解是一个图是有向无环图的充要条件。基于减治法的拓扑排序,基本原理是源删除,每次寻找一个入度为0的点,根据这个点的出度找到下一个点,然后删除这个点和所有的所有出度,再继续迭代操作。

public class Main {public static void main(String[] args) {int[][] e = {{0, 0, 1, 0, 0},{0, 0, 1, 0, 0},{0, 0, 0, 1, 1},{0, 0, 0, 0, 1},{0, 0, 0, 0, 0},};char[] result = f(e);for(int i = 0;i < result.length;i++)System.out.print(result[i]+" ");}public static char[] f(int[][] e){int[] source = get(e);char[] result = new char[source.length];int cnt = 0;int flag = 1;while(flag == 1){for(int i = 0;i < source.length;i++){/*** 寻找入度为0的点,进入排序队列,入度值设为-1* */if(source[i] == 0) {result[cnt++] = (char) ('a'+i);source[i] = -1;for(int j = 0;j < e[i].length;j++) {if(e[i][j] == 1) {source[j] -= 1;          //第j个顶点的入度减1}}}}if(cnt == source.length)flag = 0;}return result;}/*** 返回给出图每个顶点的入度值*/public static int[] get(int[][] e){int len = e[0].length;int[] source = new int[len];for(int i = 0;i < len;i++){int count = 0;for(int j = 0;j < len;j++){/*** 列对应入读* */if(e[j][i] == 1)count++;}source[i] = count;}return source;}
}

发现问题:拓扑排序的解通常不止一个,如果是数据量庞大的工程,那么在进行算法之前一定要检查集合是否满足有向无环图,而且大数据量的情况下这种基于减治的算法和基于搜索算法DFS效率都是不高的。

优化思路:CPM(关键路径法)和PERT(程序评估和检查技术)

减治法在求解拓扑排序问题中的应用(JAVA)--有向无环图相关推荐

  1. 打印一种拓扑排序(假定给的是有向无环图时)DFS+栈

    一.定义: 在计算机科学领域,有向图的拓扑排序是其顶点的线性排序,使得对于从顶点u 到顶点v的每个有向边uv,u在排序中都在v之前. 例如,图形的顶点可以表示要执行的任务,并且边可以表示一个任务必须在 ...

  2. java 有向无环图 树_拓扑排序-有向无环图(DAG, Directed Acyclic Graph)

    条件: 1.每个顶点出现且只出现一次. 2.若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面. 有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说. 一 ...

  3. 数据结构(六):图的概念、存储方式、基本操作、最小生成树、最短路径、有向无环图、关键路径 | Prim、Kruskal算法 | BFS、Dijkstra、Floyd算法 | 拓扑排序 | 求关键路径

    文章目录 第六章 图 一.图 (一)图的定义 (二)图逻辑结构的应用 (三)无向图.有向图 (四)简单图.多重图 (五)顶点的度.入度.出度 (六)顶点-顶点的关系描述 (七)连通图.强连通图 (八) ...

  4. 有向无环图DAG 拓扑排序 代码解释

    目录: DAG定义 举例描述 实际运用 算法描述 算法实战 算法可视化 定义 在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序(英语:Topological ...

  5. 数据结构-考研难点代码突破 (C++实现有向无环图的拓扑排序)

    文章目录 1. AOV网 2. 拓扑排序 C++代码 1. AOV网 AOV网∶若用DAG 图(有向无环图)表示一个工程,其顶点表示活动,用有向边<Vi,Vj>表示活动 Vi必须先于活动V ...

  6. 分治法在求解凸包问题中的应用(JAVA)--快包算法

    分治法在求解凸包问题中的应用(JAVA) 之前写过一篇蛮力法在求解凸包问题中的应用(JAVA)还算简单易懂,没有基础的读者最好先去阅读以下. 这里用分治法来求解凸包问题,由于这个算法和快速排序十分相似 ...

  7. 有向无环图中的拓扑排序

    ´有向无环图(DAG),指不存在环的有向图 ´点的入度,指以这个点为结束点的边数 ´点的出度,指以这个点为出发点的边数 ´拓扑序就是对于节点的一个排列使得若(u,v)∈E,那么u在排列中出现的位置一定 ...

  8. LeetCode 2192. 有向无环图中一个节点的所有祖先(拓扑排序)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个正整数 n ,它表示一个 有向无环图 中节点的数目,节点编号为 0 到 n - 1 (包括两者). 给你一个二维整数数组 edges ,其中 ed ...

  9. 【图论】有向无环图的拓扑排序

    1. 引言 有向无环图(Directed Acyclic Graph, DAG)是有向图的一种,字面意思的理解就是图中没有环.常常被用来表示事件之间的驱动依赖关系,管理任务之间的调度.拓扑排序是对DA ...

最新文章

  1. 计算机文件系统小结,文件系统总结.doc
  2. HTML5-canvas实例:刮刮乐游戏
  3. 归纳推理测试没做完_看她家新房,保洁做完还没家具就很漂亮,墙面刷灰色耐看又耐脏...
  4. chameleon 算法_使用Chameleon,Shrinkwrap,Drone / Graphene与Arquillian进行Java EE集成测试...
  5. OJ1017: 表面积和体积
  6. 解题报告:hdu1248寒冰王座 - 完全背包模板
  7. selenium使用webdriver新开标签页
  8. EAR、JAR、WAR(IT)
  9. linux常见的三种shell,几种常见的Shell
  10. Julia: eval的一些用法
  11. 批判性思维--如何高效学习
  12. 主流H5、Js 3D游戏引擎和框架
  13. 工业通讯 | OEM嵌入式通讯模块与西门子PLC S7-1200通讯测试指南
  14. Fuzzy analytic hierarchy process(模糊层次分析法)论文学习
  15. ubuntu 拷贝文件夹下所有文件到其他文件夹操作
  16. 人工智能发展历史概述
  17. Android4太极,Android 绘制太极图实例详解
  18. linux密码记录木马,注意 “QQ大盗”木马注入 QQ 进程记录QQ账号与密码
  19. mysql安装教程_mysql 5.5 安装配置方法图文教程
  20. 二十二、商城 - 商品录入-FastDFS(10)

热门文章

  1. java中函数_java中的函数
  2. md 生成目录 码云_搭建简易博客方案
  3. IDEA中运行springboot+vue项目设置terminal路径
  4. HTML+CSS+JS实现 ❤️感谢关注3D文字动画特效❤️
  5. ❤️六W字《计算机基础知识》(一)(建议收藏)❤️
  6. 《零基础》MySQL 排序(十八)
  7. 选择排序--Java
  8. android 高度百分比,如何在Android中进行百分比高度和宽度?
  9. C++ friend关键字
  10. 自定义键盘码_无线+矮轴≤299?ikbc S200 2.4G 机械键盘测评