Committed by
Gerrit Code Review
Added short-circuit to Dijkstra when there are no edges.
Change-Id: I7e647ffceeae9de1736c5f36159c33d882bdb9f2
Showing
2 changed files
with
40 additions
and
0 deletions
... | @@ -38,6 +38,11 @@ public class DijkstraGraphSearch<V extends Vertex, E extends Edge<V>> | ... | @@ -38,6 +38,11 @@ public class DijkstraGraphSearch<V extends Vertex, E extends Edge<V>> |
38 | // Cost to reach the source vertex is 0 of course. | 38 | // Cost to reach the source vertex is 0 of course. |
39 | result.updateVertex(src, null, 0.0, false); | 39 | result.updateVertex(src, null, 0.0, false); |
40 | 40 | ||
41 | + if (graph.getEdges().isEmpty()) { | ||
42 | + result.buildPaths(); | ||
43 | + return result; | ||
44 | + } | ||
45 | + | ||
41 | // Use the min priority queue to progressively find each nearest | 46 | // Use the min priority queue to progressively find each nearest |
42 | // vertex until we reach the desired destination, if one was given, | 47 | // vertex until we reach the desired destination, if one was given, |
43 | // or until we reach all possible destinations. | 48 | // or until we reach all possible destinations. | ... | ... |
... | @@ -17,6 +17,8 @@ package org.onlab.graph; | ... | @@ -17,6 +17,8 @@ package org.onlab.graph; |
17 | 17 | ||
18 | import org.junit.Test; | 18 | import org.junit.Test; |
19 | 19 | ||
20 | +import java.text.DecimalFormat; | ||
21 | +import java.util.HashSet; | ||
20 | import java.util.Set; | 22 | import java.util.Set; |
21 | 23 | ||
22 | import static com.google.common.collect.ImmutableSet.of; | 24 | import static com.google.common.collect.ImmutableSet.of; |
... | @@ -123,4 +125,37 @@ public class DijkstraGraphSearchTest extends BreadthFirstSearchTest { | ... | @@ -123,4 +125,37 @@ public class DijkstraGraphSearchTest extends BreadthFirstSearchTest { |
123 | executeSearch(graphSearch(), graph, A, G, weight, 3, 4.0); | 125 | executeSearch(graphSearch(), graph, A, G, weight, 3, 4.0); |
124 | } | 126 | } |
125 | 127 | ||
128 | + @Test | ||
129 | + public void disconnectedPerf() { | ||
130 | + disconnected(); | ||
131 | + disconnected(); | ||
132 | + disconnected(); | ||
133 | + disconnected(); | ||
134 | + disconnected(); | ||
135 | + disconnected(); | ||
136 | + disconnected(); | ||
137 | + disconnected(); | ||
138 | + disconnected(); | ||
139 | + disconnected(); | ||
140 | + } | ||
141 | + | ||
142 | + | ||
143 | + @Test | ||
144 | + public void disconnected() { | ||
145 | + Set<TestVertex> vertexes = new HashSet<>(); | ||
146 | + for (int i = 0; i < 200; i++) { | ||
147 | + vertexes.add(new TestVertex("v" + i)); | ||
148 | + } | ||
149 | + | ||
150 | + graph = new AdjacencyListsGraph<>(vertexes, of()); | ||
151 | + | ||
152 | + long start = System.nanoTime(); | ||
153 | + for (TestVertex src : vertexes) { | ||
154 | + executeSearch(graphSearch(), graph, src, null, null, 0, 0); | ||
155 | + } | ||
156 | + long end = System.nanoTime(); | ||
157 | + DecimalFormat fmt = new DecimalFormat("#,###"); | ||
158 | + System.out.println("Compute cost is " + fmt.format(end - start) + " nanos"); | ||
159 | + } | ||
160 | + | ||
126 | } | 161 | } | ... | ... |
-
Please register or login to post a comment