discrete_distribution Случайное распределение числа производит случайные целые числаi,0≤i<n, распределенных в соответствии с дискретной вероятностной функции
P(i|p0,…,pn−1)=pi.
Если не указано иное, параметры распределения рассчитываются как:, pk=wk/S for k=0,…,n−1 в котором значенияwk, обычно известные как , должны быть неотрицательными, отличными от NaN и бесконечными. Кроме того, соотношение должно занимать: .weights0<S=w0+⋯+wn−1
template<class IntType = int> class discrete_distribution { public: // types using result_type = IntType; using param_type = unspecified; // constructor and reset functions discrete_distribution(); template<class InputIterator> discrete_distribution(InputIterator firstW, InputIterator lastW); discrete_distribution(initializer_list<double> wl); template<class UnaryOperation> discrete_distribution(size_t nw, double xmin, double xmax, UnaryOperation fw); explicit discrete_distribution(const param_type& parm); void reset(); // generating functions template<class URBG> result_type operator()(URBG& g); template<class URBG> result_type operator()(URBG& g, const param_type& parm); // property functions vector<double> probabilities() const; param_type param() const; void param(const param_type& parm); result_type min() const; result_type max() const; };
discrete_distribution();
Effects: Создаетdiscrete_distribution объект с помощьюn=1 иp0=1. [ Note: Такой объект всегда будет иметь ценность0. ] — end note
template<class InputIterator>
discrete_distribution(InputIterator firstW, InputIterator lastW);
Requires: InputIterator должны удовлетворять требованиямinput iterator. Кроме того, iterator_traits<InputIterator>::value_type будет обозначать тип, в который можно преобразоватьdouble. ЕслиfirstW == lastW, пустьn=1 иw0=1. В противном случае [firstW,lastW) формируется последовательностьw длиныn>0.
discrete_distribution(initializer_list<double> wl);
template<class UnaryOperation>
discrete_distribution(size_t nw, double xmin, double xmax, UnaryOperation fw);
Requires: Каждый экземпляр типаUnaryOperation должен бытьfunction object типом возвращаемого значения, в который можно преобразоватьdouble. Более того, double должен быть преобразован в типUnaryOperationединственного параметра. Еслиnw=0, пустьn=1, иначе пустьn=nw. Отношение 0<δ=(xmax−xmin)/n должно сохраняться.
Effects: Создаетdiscrete_distribution объект с вероятностями, заданными формулой выше, используя следующие значения: Еслиnw=0, пустьw0=1. В противном случае пустьwk=fw(xmin+k⋅δ+δ/2) дляk=0,…,n−1.
vector<double> probabilities() const;