diff options
-rw-r--r-- | src/common/bloom_filter.hpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/common/bloom_filter.hpp b/src/common/bloom_filter.hpp index 4b711526676..8587caa2d8d 100644 --- a/src/common/bloom_filter.hpp +++ b/src/common/bloom_filter.hpp @@ -317,7 +317,7 @@ public: return (double)set / (double)(table_size_ << 3); } - inline double approx_unique_element_count() const { + virtual inline double approx_unique_element_count() const { // this is not a very good estimate; a better solution should have // some asymptotic behavior as density() approaches 1.0. return (double)target_element_count_ * 2.0 * density(); @@ -637,6 +637,14 @@ public: return true; } + virtual inline double approx_unique_element_count() const { + // this is not a very good estimate; a better solution should have + // some asymptotic behavior as density() approaches 1.0. + // + // the compress() correction is also bad; it tends to under-estimate. + return (double)target_element_count_ * 2.0 * density() * (double)size_list.back() / (double)size_list.front(); + } + private: inline virtual void compute_indices(const bloom_type& hash, std::size_t& bit_index, std::size_t& bit) const |