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

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

拓扑排序:对于一个有向无环图来说,如果我们能够按照次序列出顶点,使得对于每条边来说,边的起始顶点总是排在边的结束顶点之前,那么这个过程就称为拓扑排序,拓扑排序有解是一个图是有向无环图的充要条件。基于减治法的拓扑排序,基本原理是源删除,每次寻找一个入度为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(程序评估和检查技术)


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/569785.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java中string.equalsIgnoreCase(0)与0.equalsIgnoreCase(string)的区别:

string.equalsIgnoreCase("0")&#xff1a;如果string为null,会抛出java.lang.NullPointerException异常。 "0".equalsIgnoreCase(string)&#xff1a;即使string为null也不会抛出异常。 所以一般如果判断一个字符串与一个常量是否相等的时候&#xff0c;应…

减治法在生成全排列中的应用(JAVA)--回溯、Johnson-Trotter算法、自字典序

减治法在生成组合对象问题中的应用 在深入浅出讲算法思想--蛮力法思想分析及应用这篇文章的最优解问题中中已经初步讲解了这类应用&#xff0c;下面我们将使用减治法再次思考这类问题。 1、全排列问题&#xff0c;在数学中求解一个n个数组合的全排列问题会产生n&#xff01;…

减治法在生成子集问题中的应用(JAVA)--递归、二进制反射格雷码

减治法在生成组合对象问题中的应用 生成子集问题&#xff1a;经典的背包问题就是求解一个最优子集的问题&#xff0c;这里我们来讨论一个更简单的问题。对于任意一个集合来说&#xff0c;它都存在2^n个子集&#xff08;一个集合所有的子集集合称为幂集&#xff09;。 1&…

【第九课】MriaDB密码重置和慢查询日志

目录 1、如何进行修改MariaDB的密码2、Mariadb的慢查询日志1、如何进行修改MariaDB的密码 记得root密码的修改方式&#xff1a; [rootlocalhost ~]# mysqladmin -uroot -p123456 password "123123" [rootlocalhost ~]# mysql -uroot -p Enter password: ERROR 1045 …

减治法解决俄式乘法问题(JAVA)

以上是在《算法设计与分析基础》一书中给出的定义。 这种算法只包括折半、加倍、相加这几个操作&#xff0c;在计算时&#xff0c;不需要用九九乘法表 。 同时&#xff0c;这个方法每次都会将计算的规模减少&#xff0c;运用了减治的思想 public class Main {public static…

1.需要对txt存放的测试数据做去重处理,代码如下

采用集合去重&#xff0c;在新文件里逐行写入&#xff0c;达成目的 old_file "D:/testdata/memberId.txt" #old result_file "D:/testdata/memberId_new.txt" #new lines_seen set() out_file open(result_file, "w") f open(old_file, &q…

减治法解决尼姆(Nim)游戏/拈游戏问题(JAVA)

尼姆游戏是一种两个人玩的回合制数学策略游戏。游戏者轮流从一堆棋子&#xff08;一共有好几堆&#xff0c;一次只能从其中一堆拿。&#xff09;&#xff08;或者任何道具&#xff09;中取走一个或者多个&#xff0c;最后不能再取的就是输家。当指定相应数量时&#xff0c;一堆…

jquery中$(document).ready()和window.onload的区别

在Jquery里面&#xff0c;我们可以看到两种写法:$(function(){}) 和$(document).ready(function(){}) 这两个方法的效果都是一样的&#xff0c;都是在dom文档树加载完之后执行一个函数&#xff08;注意&#xff0c;这里面的文档树加载完不代表全部文件加载完&#xff09;。 $(d…

蛮力法在排序算法中的应用(JAVA)--选择排序、冒泡排序

蛮力法在排序算法中的应用 对于一个排序问题&#xff0c;我们能想到的最简单的排序方法就是选择和冒泡 1、选择排序&#xff1a;时间复杂度O(n^2) public class Main {public static void main(String[] args) {int[] a {89, 45, 68, 90, 29, 34, 17};int min;for (int i 0…

PyCherm的常用快捷键总结

、Ctrl Enter&#xff1a;在下方新建行但不移动光标&#xff1b; 2、Shift Enter&#xff1a;在下方新建行并移到新行行首&#xff1b; 3、Ctrl /&#xff1a;注释(取消注释)选择的行&#xff1b; 4、Ctrl Alt L&#xff1a;格式化代码(与QQ锁定热键冲突&#xff0c;关闭Q…

蛮力法在查找算法中的应用(JAVA)--顺序查找

蛮力法在查找算法中的应用 对于查找算法来说&#xff0c;最简单的一个思路就是逐个匹配&#xff0c;直到找到目标元素 顺序查找&#xff1a; public class Main {public static void main(String[] args) {int[] a {89, 45, 68, 90, 29, 34, 17, 0};int k 45;int i 0;a[a.…

Xshell报错“The remote SSH server rejected X11 forwarding request.”

xshell连接centos7&#xff0c;报错&#xff1a;“The remote SSH server rejected X11 forwarding request.” 打开文件/etc/ssh/sshd_config,修改下面的参数 X11Forwarding yes 如果有&#xff0c;那就不用修改 修改xshell连接属性 把勾选去掉即可&#xff01; 参考&#xff…

蛮力法在字符串匹配问题中的应用(JAVA)--朴素模式匹配算法

蛮力法在字符串匹配问题中的应用字符串匹配问题通常是给定一个n个字符组成的串&#xff08;称为文本&#xff09;&#xff0c;一个m&#xff08;m<n&#xff09;个字符的串&#xff08;称为模式&#xff09;&#xff0c;从文本中寻找匹配模式的子串。显然我们需要逐个匹配&a…

蛮力法在求解“最近对”问题中的应用(JAVA)

最近对问题是在计算几何问题中最简单的&#xff0c;是指在一个包含n个点的集合中&#xff0c;找到距离最近的两个点&#xff0c;我们这里只研究二维空间中的版本&#xff0c;高维计算基本类似&#xff0c;区别只在于计算两点之间距离的公式略有不同&#xff0c;下面是标准的欧几…

测试框架有哪些

自动化测试最近几年都是大热&#xff0c;这里结合网上以及自己的经验整理了一些&#xff0c;自动化测试必问的一些题目&#xff0c;为想进入软件测试行业的同学一点帮助。一、如何理解自动化测试&#xff1f; 每个面试自动化测试的&#xff0c;80%会被问到这个。不用太宽泛&…

蛮力法在求解凸包问题中的应用(JAVA)

凸包问题向来是计算几何中最重要的问题之一&#xff0c;许多各式各样的应用大多要么本身就是图凸包问题要么其中一部分需要按照凸包问题解决。 凸集合定义&#xff1a;对于平面上一个点集合&#xff0c;如果集合中的任意两点p和q为端点的线段都属于该集合&#xff0c;那么称这…

人生路上对我影响最大的三位老师

在我的人生路上对我影响最大的三位老师第一位那便可能是我小学一年级到五年级的数学老师&#xff0c;他对我的影响确实是挺大但都是负面的那个老师不怎么负责人经常进来上课都是一身酒味在他四年的教导下以至于我到了五年级了两位数的乘除法都忘的差不多了&#xff0c;其实这也…

蛮力法在求解最优解问题中的应用(JAVA)--旅行家问题、背包问题、分配问题

蛮力法在求解最优解问题中的应用 1、TSP&#xff08;旅行商问题&#xff09;要求我们找出一条n个给定城市之间的最短路径&#xff0c;使我们再回到出发的城市之前&#xff0c;对欧每个城市都只访问一次。我们可以用赋权图来描述这个问题&#xff0c;那么算法的目的就是求解一个…

分治法在排序算法中的应用(JAVA)--归并排序

分治法最常用的就是将规模为n的实例划分成两个n规模为n/2的实例 。推广到一般的情况&#xff0c;我们可以将规模为n的实例划分为b个规模为n/b的实例。这样对于算法的运行时间存在递推式&#xff1a;T(n) aT&#xff08;n/b&#xff09;f&#xff08;n&#xff09;&#xff0c;…

ant design Modal关闭时清除数据的解决方案

背景&#xff1a;modal组件关闭时不清除数据&#xff0c;原来输入的数据还存在 解决方案&#xff1a; 1、modal的api&#xff1a;destroyOnClose 2、手动控制modal的销毁 this.state {destroy:true //设一开始为不显示状态 }{this.state.isDestroy? : <Modal classNam…