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:
|
|