From c89aebcaf6be6a1aee7e3cc79f647562f4d9e547 Mon Sep 17 00:00:00 2001 From: kuldeepmeel Date: Wed, 17 Feb 2021 00:25:56 +0800 Subject: [PATCH] edits --- src/counter.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/counter.cpp b/src/counter.cpp index 6bb6a06..e166f27 100644 --- a/src/counter.cpp +++ b/src/counter.cpp @@ -525,6 +525,13 @@ void Counter::one_measurement_count( int64_t hashCount = mPrev; int64_t hashPrev = hashCount; + + //We are doing a galloping search here (see our IJCAI-16 paper for more details). + //lowerFib is referred to as loIndex and upperFib is referred to as hiIndex + //The key idea is that we first do an exponential search and then do binary search + //This is implemented by using two sentinels: lowerFib and upperFib. The correct answer + // is always between lowFib and upperFib. We do exponential search until upperFib < lowerFib/2 + // Once upperFib < lowerFib/2; we do a binary search. while (numExplored < total_max_xors) { uint64_t cur_hash_count = hashCount; const vector assumps = set_num_hashes(hashCount, hm.hashes, sparse_data); @@ -629,9 +636,13 @@ void Counter::one_measurement_count( lowerFib = hashCount; hashCount++; } else if (lowerFib + (hashCount-lowerFib)*2 >= upperFib-1) { + + // Whenever the above condition is satisfied, we are in binary sesarch mode lowerFib = hashCount; hashCount = (lowerFib+upperFib)/2; } else { + + // We are in exponential search mode. hashCount = lowerFib + (hashCount-lowerFib)*2; } }