The resulting algorithm is super-fast...
|
for ( i = i; i ≤ N; i++ )
{
insert ei into s0; // insert unsorted !
if ( |s0| < b )
contiune; // stop, get another item
/* -----------------------------------
Level 0 is full... PACK IT UP !!!
----------------------------------- */
sort s0;
sc = compress(s0, 1/b); // Greenwald+Khanna's prune(s0, ⌈b/2⌉ + 1);
s0 = ∅;
for ( k = 1; k <= L; k++ )
{
if ( |sk| == 0 )
{
/* --------------------------------------
Empty: put compressed summary in sk
-------------------------------------- */
sk = sc; // Store it
break; // Done
}
else
{
/* --------------------------------------
sk contained a compressed summary
-------------------------------------- */
tmp = merge(sk, sc); // Greenwald+Khanna's combine(sk, sc);
sc = compress(tmp, 1/b); // Greenwald+Khanna's prune(tmp, ⌈b/2⌉ + 1);
// NOTE: sc is used in next iteration
// - it is passed to the next level !
sk = ∅; // Re-initialize
}
}
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Proof:
|
|