Skip to content

Commit

Permalink
little optimizations to Shortest Path algorithm
Browse files Browse the repository at this point in the history
  • Loading branch information
luigidellaquila committed Jun 12, 2015
1 parent c93b029 commit 194907b
Showing 1 changed file with 11 additions and 12 deletions.
Expand Up @@ -93,31 +93,32 @@ public List<ORID> execute(Object iThis, final OIdentifiable iCurrentRecord, Obje
reverseDirection = Direction.OUT; reverseDirection = Direction.OUT;
} }


Object edgeType = null; String edgeType = null;
if (iParams.length > 3) { if (iParams.length > 3) {
edgeType = iParams[3]; edgeType = iParams[3] == null ? null : "" + iParams[3];
} }
String[] edgeTypeParam = new String[] { edgeType };


ArrayDeque<OrientVertex> queue1 = new ArrayDeque<OrientVertex>(); ArrayDeque<OrientVertex> queue1 = new ArrayDeque<OrientVertex>();
ArrayDeque<OrientVertex> queue2 = new ArrayDeque<OrientVertex>(); ArrayDeque<OrientVertex> queue2 = new ArrayDeque<OrientVertex>();


final Set<ORID> visited = new HashSet<ORID>();

final Set<ORID> leftVisited = new HashSet<ORID>(); final Set<ORID> leftVisited = new HashSet<ORID>();
final Set<ORID> rightVisited = new HashSet<ORID>(); final Set<ORID> rightVisited = new HashSet<ORID>();


final Map<ORID, ORID> previouses = new HashMap<ORID, ORID>(); final Map<ORID, ORID> previouses = new HashMap<ORID, ORID>();
final Map<ORID, ORID> nexts = new HashMap<ORID, ORID>(); final Map<ORID, ORID> nexts = new HashMap<ORID, ORID>();


queue1.add(sourceVertex); queue1.add(sourceVertex);
visited.add(sourceVertex.getIdentity()); leftVisited.add(sourceVertex.getIdentity());


queue2.add(destinationVertex); queue2.add(destinationVertex);
visited.add(destinationVertex.getIdentity()); rightVisited.add(destinationVertex.getIdentity());


OrientVertex current; OrientVertex current;
OrientVertex reverseCurrent; OrientVertex reverseCurrent;




while (true) { while (true) {
if (queue1.isEmpty() && queue2.isEmpty()) { if (queue1.isEmpty() && queue2.isEmpty()) {
break; break;
Expand All @@ -131,7 +132,7 @@ public List<ORID> execute(Object iThis, final OIdentifiable iCurrentRecord, Obje
if (edgeType == null) { if (edgeType == null) {
neighbors = current.getVertices(direction); neighbors = current.getVertices(direction);
} else { } else {
neighbors = current.getVertices(direction, new String[] { "" + edgeType }); neighbors = current.getVertices(direction, edgeTypeParam);
} }
for (Vertex neighbor : neighbors) { for (Vertex neighbor : neighbors) {
final OrientVertex v = (OrientVertex) neighbor; final OrientVertex v = (OrientVertex) neighbor;
Expand All @@ -141,11 +142,10 @@ public List<ORID> execute(Object iThis, final OIdentifiable iCurrentRecord, Obje
previouses.put(neighborIdentity, current.getIdentity()); previouses.put(neighborIdentity, current.getIdentity());
return computePath(previouses, nexts, neighborIdentity); return computePath(previouses, nexts, neighborIdentity);
} }
if (!visited.contains(neighborIdentity)) { if (!leftVisited.contains(neighborIdentity)) {
previouses.put(neighborIdentity, current.getIdentity()); previouses.put(neighborIdentity, current.getIdentity());


nextLevelQueue.offer(v); nextLevelQueue.offer(v);
visited.add(neighborIdentity);
leftVisited.add(neighborIdentity); leftVisited.add(neighborIdentity);
} }


Expand All @@ -161,7 +161,7 @@ public List<ORID> execute(Object iThis, final OIdentifiable iCurrentRecord, Obje
if (edgeType == null) { if (edgeType == null) {
neighbors = reverseCurrent.getVertices(reverseDirection); neighbors = reverseCurrent.getVertices(reverseDirection);
} else { } else {
neighbors = reverseCurrent.getVertices(reverseDirection, new String[] { "" + edgeType }); neighbors = reverseCurrent.getVertices(reverseDirection, edgeTypeParam);
} }
for (Vertex neighbor : neighbors) { for (Vertex neighbor : neighbors) {
final OrientVertex v = (OrientVertex) neighbor; final OrientVertex v = (OrientVertex) neighbor;
Expand All @@ -171,12 +171,11 @@ public List<ORID> execute(Object iThis, final OIdentifiable iCurrentRecord, Obje
nexts.put(neighborIdentity, reverseCurrent.getIdentity()); nexts.put(neighborIdentity, reverseCurrent.getIdentity());
return computePath(previouses, nexts, neighborIdentity); return computePath(previouses, nexts, neighborIdentity);
} }
if (!visited.contains(neighborIdentity)) { if (!rightVisited.contains(neighborIdentity)) {


nexts.put(neighborIdentity, reverseCurrent.getIdentity()); nexts.put(neighborIdentity, reverseCurrent.getIdentity());


nextLevelQueue.offer(v); nextLevelQueue.offer(v);
visited.add(neighborIdentity);
rightVisited.add(neighborIdentity); rightVisited.add(neighborIdentity);
} }


Expand Down

0 comments on commit 194907b

Please sign in to comment.