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,
const allocator_type& alloc);
94 virtual VariableLog2ParamComplexity* clone()
const;
97 virtual VariableLog2ParamComplexity* clone(
const allocator_type& alloc)
const;
100 virtual ~VariableLog2ParamComplexity();
111 VariableLog2ParamComplexity& operator=(
const VariableLog2ParamComplexity& from);
114 VariableLog2ParamComplexity& operator=(VariableLog2ParamComplexity&& from);
125 double log2Cnr(
const std::size_t r,
const double n);
128 void CnrToFile(
const std::string& filename);
131 void useCache(
const bool on_off);
137 allocator_type getAllocator()
const;
144 const double _Szpankowski_threshold_{VariableLog2ParamComplexityCTableNSize};
159 const double _cst1_ = -0.5 + std::log2(std::sqrt(M_PI));
160 const double _cst2_ = std::sqrt(2.0 / M_PI) / 3.0;
161 const double _cst3_ = 3.0 / 36.0 - 4.0 / (9.0 * M_PI);
164 bool _use_cache_{
true};
167 HashTable< std::pair< std::size_t,
double >,
double > _cache_;
174 #include <agrum/tools/core/math/variableLog2ParamComplexity_tpl.h>