taco-db  0.1.0
TruncatedZipfian.h
Go to the documentation of this file.
1 #ifndef UTILS_TRUNCATED_ZIPFIAN_H
2 #define UTILS_TRUNCATED_ZIPFIAN_H
3 
4 #include "tdb.h"
5 
6 #include <random>
7 
8 #include "Walker.h"
9 
10 namespace taco {
11 
22 public:
23  using result_type = uint32_t;
24  //
25  // using param_type = /* something */;
26 
29  m_N(0) {}
30 
37  TruncatedZipfian(uint32_t N, double s, double prob_to_truncate);
38 
39  template<typename RNG>
40  inline uint32_t
41  operator()(RNG &rng) {
42  uint32_t x = m_walker(rng);
43  if (x >= m_min_in_unif) {
44  x = m_unif_rem(rng);
45  }
46  return x;
47  }
48 
49  constexpr uint32_t
51  return m_min_in_unif;
52  }
53 
54  double GetProbability(uint32_t x) const;
55 
56  constexpr double
58  return m_total_prob_trunc;
59  }
60 
61 private:
62  uint32_t m_N;
63  uint32_t m_min_in_unif;
64  double m_s;
65  double m_H;
67 
69  std::uniform_int_distribution<uint32_t> m_unif_rem;
70 };
71 
72 } // namespace taco
73 
74 #endif // UTILS_TRUNCATED_ZIPFIAN_H
A truncated zipfian distribution over [0, N - 1], where all items with probability smaller than a thr...
Definition: TruncatedZipfian.h:21
uint32_t operator()(RNG &rng)
Definition: TruncatedZipfian.h:41
constexpr double GetTotalTruncatedProbability() const
Definition: TruncatedZipfian.h:57
uint32_t result_type
Definition: TruncatedZipfian.h:23
double GetProbability(uint32_t x) const
Definition: TruncatedZipfian.cpp:55
double m_s
Definition: TruncatedZipfian.h:64
uint32_t m_N
Definition: TruncatedZipfian.h:62
TruncatedZipfian()
Default constructs truncated zipfian in an invalid state.
Definition: TruncatedZipfian.h:28
constexpr uint32_t GetMinTruncatedItem() const
Definition: TruncatedZipfian.h:50
double m_total_prob_trunc
Definition: TruncatedZipfian.h:66
double m_H
Definition: TruncatedZipfian.h:65
uint32_t m_min_in_unif
Definition: TruncatedZipfian.h:63
std::uniform_int_distribution< uint32_t > m_unif_rem
Definition: TruncatedZipfian.h:69
Walker m_walker
Definition: TruncatedZipfian.h:68
A discrete distribution over non-negative integer set [n] for some n over a given probability distrib...
Definition: Walker.h:19
Definition: datum.h:28