- 浏览: 1682213 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (335)
- uml (11)
- java (318)
- python (11)
- socket (2)
- ant (1)
- data structures (58)
- algorithms (67)
- concurrency (16)
- multithreading (16)
- mysql (2)
- ubuntu (2)
- c语言 (1)
- lucene (0)
- elasticsearch (0)
- django (1)
- 读书 观点 (2)
- 读书 (4)
- 观点 (4)
- collections (8)
- nio (1)
- io (2)
- 系统集成 (1)
- activemq (2)
- restful (0)
- web service (0)
- HttpClient (1)
- serializable (0)
- annotation (1)
- jdbc (3)
- classloader (0)
- regular expression (1)
- jpa (4)
- jvm (0)
- reflection (1)
- commons-pool2 (2)
- javamail (1)
- velocity (1)
- mathematics (3)
- graph (13)
- LeetCode (159)
- scala (0)
- spring (24)
- maven (5)
- spring batch (1)
- quartz (2)
- IOC (2)
- ORM (3)
- hibernate (2)
- aop (4)
- redis (0)
- zookeeper (0)
- spring mvc (4)
- ELK (1)
- string (1)
- gradle (1)
- mybatis (5)
- docker (0)
- servlet (0)
- log4j2 (1)
- html (0)
- css (0)
最新评论
-
nucleus:
貌似是因为图片的路径是http的缘故:http://dl2.i ...
spring container 实现分析:BeanWrapper -
nucleus:
nucleus 写道BeanWrapper这一块相关的类结构如 ...
spring container 实现分析:BeanWrapper -
nucleus:
BeanWrapper这一块相关的类结构如下图:文中提到的上述 ...
spring container 实现分析:BeanWrapper -
leshy:
inventory.sort(Comparator.compa ...
java8 lambda表达式学习总结 -
Leisurez:
di1984HIT 写道xuexile~hahaha~
activemq的几种基本通信方式总结
问题分析
这是一个 比较有意思的问题,它不是一个简单的BFS应用。里面还有一些稍微的变换。
首先一个,对于一个图的complement graph来说,它是针对每个节点取所有原来和它不相邻的节点建立直接连接。比如说对如下的图来说:
它对应的complement graph如下:
所以这种转换就是针对每个节点将它原来的邻接边换成以前没有邻接的节点。不过,问题里要求计算这个complement graph的最短路径。所以一种办法就是我们根据一个图,先计算它的complement graph。然后再用BFS的方式来计算它的最短路径。这里假定图里的所有边都是一样的,没有特定的权值差别。 可是以这种办法计算的效率如何呢?对于每个节点,我们要对它的边重新计算一遍,所以每个节点的边构造时间就有V,所以光遍历这所有的V个节点它的总体时间复杂度就为V * V了。这里就超出了前面的期望结果。
所以,这里需要做一个调整。我们可以继续利用BFS的方法,不过这里需要做一点调整。每次我们碰到一个节点的时候,要取它的非当前邻接节点作为后续的候选遍历节点,然后将这个节点加入到队列里。按照这个思路,我们可以得到如下的代码实现:
public class ComplementGraph { private boolean[] marked; private int[] distTo; private Set<Integer> set; public ComplementGraph(Graph g) { marked = new boolean[g.vertices()]; distTo = new int[g.vertices()]; for(int i = 0; i < g.vertices() i++) { distTo[i] = Integer.MAX_VALUE; } } public bfs(Graph g, int s) { Queue<Integer> queue = new LinkedList<>(); marked[s] = true; distTo[s] = 0; queue.add(s); while(!queue.isEmpty()) { int e = queue.remove(); List<Integer> list = makeComplement(set, g.adj(e)); for(int i : list) { if(!marked[i]) { marked[i] = true; distTo[i] = distTo[e] + 1; queue.add(i); } } } } private List<Integer> makeComplement(Set<Integer> set, List<Integer> adj) { // make a complement list which is in set but not in adj } }
这里就是稍微增加了一个方法在每次遍历一个节点的时候先计算它的complement vertices。这样问题就解决了。
参考材料
http://stackoverflow.com/questions/24476027/shortest-path-in-a-complement-graph-algorithm
http://algs4.cs.princeton.edu/41graph/BreadthFirstPaths.java.html
发表评论
-
spring源代码分析:aop的实现
2018-10-03 23:32 740简介 在之前的文章里我们讨论过一些程序构建Pro ... -
java annotation基础
2018-06-30 16:41 887简介 之前有一篇简短的文章讨论过annotati ... -
spring源代码分析:annotation支持的实现
2018-09-03 23:31 2555简介 在之前的文章里,我们讨论了spring I ... -
spring container 实现分析:BeanFactory and ApplicationContext
2018-06-02 18:29 1473简介 在之前的文章里,我们讨论过作为spring ... -
spring aop: ProxyFactory
2018-04-30 16:45 842简介 在之前的文 ... -
日志与log4j2的配置和应用总结
2018-02-15 15:47 12321简介 通常我们在日常的应用开发中,日志起到一个非 ... -
Java servlet学习总结
2018-01-02 21:14 0简介 应用系统架构的演化(从CS到BS) ... -
spring container 实现分析:BeanWrapper
2018-02-19 18:10 1985简介 在之前的一篇文章里, 我们基于《Exper ... -
spring propertyeditor
2017-10-26 09:17 0pro spring 5 chapter 4, page ... -
spring bean life cycle
2018-02-25 13:30 930简介 在使用spring bean的过程中,有一个 ... -
spring container的设计与实现分析
2017-10-08 21:31 2776简介 在之前的一 ... -
jdbc数据访问的封装和演化
2017-09-16 17:00 2694简介 在使用传统jdbc的方式来访问数据的时候, ... -
Boyer Moore算法分析总结
2017-03-31 18:42 3558简介 在之前的文章里,对于字符串的搜索算法,我曾 ... -
mybatis学习总结:mybatis和spring, spring boot的集成
2017-03-04 18:07 2512简介 在前面的讨论里已经提到了mybatis的各种配置 ... -
mybatis学习总结:annotation与xml结合示例
2017-02-25 21:09 3708简介 在之前的文章里讨论过mybatis纯xml或者 ... -
mybatis学习总结:对象关系映射的xml配置实现
2017-02-19 23:03 4067简介 在之前的文章里已经讨论过mybatis的基本配 ... -
mybatis学习总结:annotation示例改进
2017-01-24 09:06 3445简介 在前一篇文 ... -
mybatis学习总结:基础示例
2017-01-21 23:30 901简介 mybatis是一个比较流行的ORM框架, ... -
gradle学习总结
2016-12-18 21:01 4633简介 Java的自动化构建工具比较多,从最开始的an ... -
String sort的几种方法
2016-10-16 23:07 2191简介 在之前的一 ...
相关推荐
The shortest path problem is one of the most fundamental problems in network optimization. This paper is concerned with shortest path problems in non-deterministic environment, in which some arcs have...
"Matlab k Shortest Path" 是一个专门用于寻找图中具有最少成本的k条路径的工具。在这个项目中,我们可以看到四个核心文件:`kShortestPath.m`、`dijkstra.m`、`TestKShortestPath.m` 和 `license.txt`。 1. **...
**标题:ShortestPath** **描述:**在计算机科学领域,单源最短路径问题是一个经典问题,旨在寻找网络图中从一个特定源节点到所有其他节点的最短路径。这里提到的“ShortestPath”是指应用了贪心算法Dijkstra(迪杰...
Priority-Based Genetic Algorithm for Shortest Path Routing Problem in OSPF 主要介绍了遗传算法求解最短路径问题中的基于优先级的编码。这种编码方式可以很有效地解决图的最短路径等问题。
本资源"11 ShortestPath.rar"显然是针对严蔚敏教授的经典教材《数据结构》中的相关内容,特别是关于最短路径算法的实现进行了深入探讨。在这里,我们将详细解析这个主题,并讨论一些相关的算法。 1. **数据结构基础...
Status ShortestPath_Floyd(Graph &G,Distance &D,Path &P,Number &N) {int i,j,k; int s,t; if(G.kind==DG||G.kind==UDG) return ERROR; for(j=0;j;j++) for(k=0;k;k++) {D[j][k]=G.arcs[j][k]; P[j][k][0]=j...
这个名为"ShortestPath_DIJ.rar_shortestpath"的压缩包包含了一个实现迪杰斯特拉(Dijkstra)算法的源代码——ShortestPath_DIJ.cpp,以及一个可能是用来记录资源来源的文本文件——www.pudn.com.txt。 迪杰斯特拉...
"K Shortest Path"(K条最短路径)是寻找图中两个顶点间多于一条最短路径的问题。这个任务通常用于在网络流量管理、交通规划以及分布式系统中。这里我们主要讨论如何用C++实现K Shortest Path算法。 首先,我们来看...
本代码 利用 Dijkstra's Shortest Path Algorithm 求解有向图的最短路径。 包括 图的构建,求解过程的,排序使用的最小堆 等所有的源代码,并包括测试用例。 是学习最小堆 和 Dijkstra's Shortest Path Algorithm ...
"shortest_path_graph"标签表明这个项目不仅实现了算法,还可能包含了图数据结构的实现。在Python中,可以使用`networkx`库来方便地处理图和路径计算。同时,为了优化搜索效率,可以考虑使用优先队列(如Python的`...
"Parallel Shortest Path Algorithms:最短路径并行算法" Parallel Shortest Path Algorithms(最短路径并行算法)是计算机科学和信息技术领域中的一种重要算法。该算法旨在解决大规模图形的单源最短路径问题...
在给出的"ShortestPath.mexw64"文件中,实现的可能是MATLAB环境下的Dijkstra算法,其文件后缀".mexw64"表明这可能是一个编译后的MATLAB可执行文件,用于提高计算性能。这类文件通常是由MATLAB的MEX接口编译的C/C++...
a shortest path approach to the multiple-vehicle routing problem with split pick-ups
本资源“spr.tar.gz_NS2 shortest path_ns2 最短路径_ns2 路由_shortest path ns2”提供了一个实现最短路径路由的示例,对于学习和理解NS2以及路由算法具有重要意义。 首先,我们要了解什么是NS2。NS2是一个广泛...
sqrt((x2-x0)^2+(y2-y0)^2)-sqrt((x1-x0)^2+(y1-y0)^2)=t
Dijkstra算法是一种经典的图论算法,由荷兰计算机科学家艾兹格·迪科斯彻于1956年提出,主要用于解决单源最短路径问题。在这个MATLAB程序中,我们将会探讨如何应用Dijkstra算法来寻找图中从指定起点到其他所有节点的...
在计算机科学和图论领域,最短路径问题(The Shortest Path Problem)是研究如何找到两个节点间路径长度最短的问题。这个问题不仅理论意义重大,在实际应用中也非常广泛,如网络路由、物流配送、城市规划等场景都有...
《VC6.0环境下最短路径算法的实现与解析》 在计算机科学中,图算法是解决各种问题的重要工具,特别是在网络分析、路径规划等领域。本文将深入探讨如何在Visual C++ 6.0(简称VC6.0)环境下,通过编程实现图的数据...
关于最短路径的求法,是Java编写的,不知道用起来怎么样