Browse Source

a long comment explaining the restore heap

avadapal 2 years ago
parent
commit
2f635f7812
1 changed files with 13 additions and 4 deletions
  1. 13 4
      heap.cpp

+ 13 - 4
heap.cpp

@@ -247,10 +247,19 @@ void verify_parent_children_heaps(MPCTIO tio, yield_t &yield, RegAS parent, RegA
 
 
 
-//
-//
-//
-//
+//  Let "x" be the root, and let "y" and "z" be the left and right children
+//  For an array, we have A[i] = x, A[2i] = y, A[2i + 1] = z.
+//  We want x \le y, and x \le z.
+//  The steps are as follows:
+//  Step 1: compare(y,z);  (1st call to to MPC Compare)
+//  Step 2: smaller = min(y,z); This is done with an mpcselect (1st call to mpcselect)
+//  Step 3: if(smaller == y) then smallerindex = 2i else smalleindex = 2i + 1; This is done with an mpcselect (2nd call to mpcselect)
+//  Step 4: compare(x,smaller); (2nd call to to MPC Compare)
+//  Step 5: smallest = min(x, smaller);  (3 call to mpcselect)
+//  Step 6: otherchild = max(x, smaller)  (4th call to mpcselect)
+//  Step 7: A[i] \gets smallest   (1st Duoam Write)
+//  Step 8: A[smallerindex] \gets otherchild (2nd Duoam Write)
+//  Overall restore_heap_property takes 2 MPC Comparisons, 4 MPC Selects, and 2 Duoram Writes
 RegXS HEAP::restore_heap_property(MPCTIO tio, yield_t &yield, RegXS index)
 {
  RegAS smallest;