Bagikan melalui


Kelas discrete_distribution

Menghasilkan distribusi bilangan bulat diskrit yang memiliki interval lebar seragam dengan probabilitas seragam di setiap interval.

Sintaks

template<class IntType = int>
class discrete_distribution
   {
public:
   // types
   typedef IntType result_type;
   struct param_type;

   // constructor and reset functions
   discrete_distribution();
   template <class InputIterator>
   discrete_distribution(InputIterator firstW, InputIterator lastW);
   discrete_distribution(initializer_list<double> weightlist);
   template <class UnaryOperation>
   discrete_distribution(size_t count, double xmin, double xmax, UnaryOperation funcweight);
   explicit discrete_distribution(const param_type& parm);
   void reset();

   // generating functions
   template <class URNG>
   result_type operator()(URNG& gen);
   template <class URNG>
   result_type operator()(URNG& gen, 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;
   };

Parameter

IntType
Jenis hasil bilangan bulat, default ke int. Untuk jenis yang mungkin, lihat acak>.<

Keterangan

Distribusi pengambilan sampel ini memiliki interval lebar seragam dengan probabilitas seragam di setiap interval. Untuk informasi tentang distribusi pengambilan sampel lainnya, lihat Kelas piecewise_linear_distribution dan Kelas piecewise_constant_distribution.

Tabel berikut ini menautkan ke artikel tentang masing-masing anggota:

discrete_distribution
param_type

Fungsi vector<double> probabilities() properti mengembalikan probabilitas individual untuk setiap bilangan bulat yang dihasilkan.

Untuk informasi selengkapnya tentang kelas distribusi dan anggotanya, lihat acak>.<

Contoh

// compile with: /EHsc /W4
#include <random>
#include <iostream>
#include <iomanip>
#include <string>
#include <map>

using namespace std;

void test(const int s) {

    // uncomment to use a non-deterministic generator
    // random_device rd;
    // mt19937 gen(rd());
    mt19937 gen(1701);

    discrete_distribution<> distr({ 1, 2, 3, 4, 5 });

    cout << endl;
    cout << "min() == " << distr.min() << endl;
    cout << "max() == " << distr.max() << endl;
    cout << "probabilities (value: probability):" << endl;
    vector<double> p = distr.probabilities();
    int counter = 0;
    for (const auto& n : p) {
        cout << fixed << setw(11) << counter << ": " << setw(14) << setprecision(10) << n << endl;
        ++counter;
    }
    cout << endl;

    // generate the distribution as a histogram
    map<int, int> histogram;
    for (int i = 0; i < s; ++i) {
        ++histogram[distr(gen)];
    }

    // print results
    cout << "Distribution for " << s << " samples:" << endl;
    for (const auto& elem : histogram) {
        cout << setw(5) << elem.first << ' ' << string(elem.second, ':') << endl;
    }
    cout << endl;
}

int main()
{
    int samples = 100;

    cout << "Use CTRL-Z to bypass data entry and run using default values." << endl;
    cout << "Enter an integer value for the sample count: ";
    cin >> samples;

    test(samples);
}
Use CTRL-Z to bypass data entry and run using default values.
Enter an integer value for the sample count: 100
min() == 0
max() == 4
probabilities (value: probability):
          0:   0.0666666667
          1:   0.1333333333
          2:   0.2000000000
          3:   0.2666666667
          4:   0.3333333333

Distribution for 100 samples:
    0 :::
    1 ::::::::::::::
    2 ::::::::::::::::::
    3 :::::::::::::::::::::::::::::
    4 ::::::::::::::::::::::::::::::::::::

Persyaratan

Header:<acak>

Namespace: std

discrete_distribution::d iscrete_distribution

Membangun distribusi.

// default constructor
discrete_distribution();

// construct using a range of weights, [firstW, lastW)
template <class InputIterator>
discrete_distribution(InputIterator firstW, InputIterator lastW);

// construct using an initializer list for range of weights
discrete_distribution(initializer_list<double> weightlist);

// construct using unary operation function
template <class UnaryOperation>
discrete_distribution(size_t count, double low, double high, UnaryOperation weightfunc);

// construct from an existing param_type structure
explicit discrete_distribution(const param_type& parm);

Parameter

firstW
Iterator pertama dalam daftar untuk membangun distribusi.

lastW
Iterator terakhir dalam daftar untuk membangun distribusi (non-inklusif karena iterator menggunakan elemen kosong untuk akhir).

daftar bobot
initializer_list untuk membangun distribusi.

count
Jumlah elemen dalam rentang distribusi. Jika count==0, setara dengan konstruktor default (selalu menghasilkan nol).

 Rendah
Nilai terendah dalam rentang distribusi.

tinggi
Nilai tertinggi dalam rentang distribusi.

weightfunc
Objek yang mewakili fungsi probabilitas untuk distribusi. Parameter dan nilai pengembalian harus dapat dikonversi ke double.

parm
Struktur yang param_type digunakan untuk membangun distribusi.

Keterangan

Konstruktor default membuat objek yang nilai probabilitas tersimpan memiliki satu elemen dengan nilai 1. Ini akan menghasilkan distribusi yang selalu menghasilkan nol.

Konstruktor rentang iterator yang memiliki parameter firstW dan lastW membangun objek distribusi dengan menggunakan nilai berat yang diambil dari iterator selama urutan interval [firstW, lastW).

Konstruktor daftar penginisialisasi yang memiliki parameter daftar bobot membangun objek distribusi dengan bobot dari daftar penginisialisasi daftar weightlist.

Konstruktor yang memiliki parameter hitungan, rendah, tinggi, dan bobot membuat objek distribusi yang diinisialisasi berdasarkan aturan ini:

  • Jika hitungan< 1, n = 1, dan dengan demikian setara dengan konstruktor default, selalu menghasilkan nol.
  • Jika hitungan> 0, n = hitungan. Disediakan d = (rendah tinggi - ) / n lebih besar dari nol, menggunakan subranges seragam d, setiap berat ditetapkan sebagai berikut: weight[k] = weightfunc(x), di mana x = k * rendah + d d + / 2, untuk k = 0, ..., n - 1.

Konstruktor yang memiliki param_type parm parameter membangun objek distribusi menggunakan parm sebagai struktur parameter yang disimpan.

discrete_distribution::p aram_type

Menyimpan semua parameter distribusi.

struct param_type {
   typedef discrete_distribution<result_type> distribution_type;
   param_type();

   // construct using a range of weights, [firstW, lastW)
   template <class InputIterator>
   param_type(InputIterator firstW, InputIterator lastW);

   // construct using an initializer list for range of weights
   param_type(initializer_list<double> weightlist);

   // construct using unary operation function
   template <class UnaryOperation>
   param_type(size_t count, double low, double high, UnaryOperation weightfunc);

   std::vector<double> probabilities() const;

   bool operator==(const param_type& right) const;
   bool operator!=(const param_type& right) const;
   };

Parameter

firstW
Iterator pertama dalam daftar untuk membangun distribusi.

lastW
Iterator terakhir dalam daftar untuk membangun distribusi (non-inklusif karena iterator menggunakan elemen kosong untuk akhir).

daftar bobot
initializer_list untuk membangun distribusi.

count
Jumlah elemen dalam rentang distribusi. Jika hitungan adalah 0, ini setara dengan konstruktor default (selalu menghasilkan nol).

 Rendah
Nilai terendah dalam rentang distribusi.

tinggi
Nilai tertinggi dalam rentang distribusi.

weightfunc
Objek yang mewakili fungsi probabilitas untuk distribusi. Parameter dan nilai pengembalian harus dapat dikonversi ke double.

right
Objek param_type untuk dibandingkan dengan ini.

Keterangan

Paket parameter ini dapat diteruskan ke operator() untuk menghasilkan nilai pengembalian.

Lihat juga

<random>