Author: simonetripodi
Date: Tue Jul 12 09:11:50 2011
New Revision: 1145501

URL: http://svn.apache.org/viewvc?rev=1145501&view=rev
Log:
fixed FIB-HEAP-EXTRACT-MIN(H) according to algorithm description, consolidate() 
is still a TODO

Modified:
    
commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/collections/FibonacciHeap.java

Modified: 
commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/collections/FibonacciHeap.java
URL: 
http://svn.apache.org/viewvc/commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/collections/FibonacciHeap.java?rev=1145501&r1=1145500&r2=1145501&view=diff
==============================================================================
--- 
commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/collections/FibonacciHeap.java
 (original)
+++ 
commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/collections/FibonacciHeap.java
 Tue Jul 12 09:11:50 2011
@@ -265,38 +265,27 @@ public final class FibonacciHeap<E>
         }
 
         // z <- min[H]
-        FibonacciHeapNode<E> currentMinimum = minimumNode;
-
-        int degree = currentMinimum.getDegree();
-        FibonacciHeapNode<E> currentChild = currentMinimum.getChild();
-        FibonacciHeapNode<E> pointer;
+        FibonacciHeapNode<E> z = minimumNode;
 
         // for each child x of z
-        while ( degree > 0 )
+        for ( FibonacciHeapNode<E> x = z.getChild().getRight(); x != 
z.getChild(); x = x.getRight() )
         {
-            pointer = currentChild.getRight();
-
-            currentChild.getLeft().setRight( currentChild.getRight() );
-            currentChild.getRight().setLeft( currentChild.getLeft() );
-
-            currentChild.setLeft( minimumNode );
-            currentChild.setRight( minimumNode.getRight() );
-            minimumNode.setRight( currentChild );
-            currentChild.getRight().setLeft( currentChild );
+            // add x to the root list of H
+            z.getLeft().setRight( x );
+            x.setLeft( z.getLeft() );
+            z.setLeft( x );
+            x.setRight( z );
 
             // p[x] <- NIL
-            currentChild.setParent( null );
-            currentChild = pointer;
-            degree--;
+            x.setParent( null );
         }
 
-        currentMinimum.getLeft().setRight( currentMinimum.getRight() );
-        currentMinimum.getRight().setLeft( currentMinimum.getLeft() );
-
         // remove z from the root list of H
+        z.getLeft().setRight( z.getRight() );
+        z.getRight().setLeft( z.getLeft() );
 
         // if z = right[z]
-        if ( currentMinimum == currentMinimum.getRight() )
+        if ( z == z.getRight() )
         {
             // min[H] <- NIL
             minimumNode = null;
@@ -304,7 +293,7 @@ public final class FibonacciHeap<E>
         else
         {
             // min[H] <- right[z]
-            minimumNode = currentMinimum.getRight();
+            minimumNode = z.getRight();
             // CONSOLIDATE(H)
             consolidate();
         }
@@ -312,7 +301,7 @@ public final class FibonacciHeap<E>
         // n[H] <- n[H] - 1
         size--;
 
-        return currentMinimum.getElement();
+        return z.getElement();
     }
 
     /**


Reply via email to