29 #ifndef GUM_VARIABLE_LOG2_PARAM_COMPLEXITY_H 30 #define GUM_VARIABLE_LOG2_PARAM_COMPLEXITY_H 36 #include <agrum/agrum.h> 37 #include <agrum/tools/core/math/math_utils.h> 38 #include <agrum/tools/core/hashTable.h> 44 extern const double VariableLog2ParamComplexityCTable[4][1000];
47 constexpr std::size_t VariableLog2ParamComplexityCTableRSize{std::size_t(4)};
50 constexpr std::size_t VariableLog2ParamComplexityCTableNSize{std::size_t(1000)};
66 template <
template <
typename >
class ALLOC = std::allocator >
67 class VariableLog2ParamComplexity:
private ALLOC<
double > {
70 using allocator_type = ALLOC<
double >;
78 VariableLog2ParamComplexity(
const allocator_type& alloc = allocator_type());
81 VariableLog2ParamComplexity(
const VariableLog2ParamComplexity& from);
84 VariableLog2ParamComplexity(
const VariableLog2ParamComplexity& from,
85 const allocator_type& alloc);
88 VariableLog2ParamComplexity(VariableLog2ParamComplexity&& from);
91 VariableLog2ParamComplexity(VariableLog2ParamComplexity&& from,
92 const allocator_type& alloc);
95 virtual VariableLog2ParamComplexity* clone()
const;
98 virtual VariableLog2ParamComplexity* clone(
const allocator_type& alloc)
const;
101 virtual ~VariableLog2ParamComplexity();
112 VariableLog2ParamComplexity&
113 operator=(
const VariableLog2ParamComplexity& from);
116 VariableLog2ParamComplexity& operator=(VariableLog2ParamComplexity&& from);
127 double log2Cnr(
const std::size_t r,
const double n);
130 void CnrToFile(
const std::string& filename);
133 void useCache(
const bool on_off);
139 allocator_type getAllocator()
const;
146 const double Szpankowski_threshold__{VariableLog2ParamComplexityCTableNSize};
161 const double cst1__ = -0.5 + std::log2(std::sqrt(M_PI));
162 const double cst2__ = std::sqrt(2.0 / M_PI) / 3.0;
163 const double cst3__ = 3.0 / 36.0 - 4.0 / (9.0 * M_PI);
166 bool use_cache__{
true};
169 HashTable< std::pair< std::size_t,
double >,
double > cache__;
176 #include <agrum/tools/core/math/variableLog2ParamComplexity_tpl.h>