Рубрики

случайный заголовок | Набор 2 (Распределения)

Набор 1 (Генераторы)

Распределения

I. Униформа:

  1. iform_int_distribution: генерирует случайные целочисленные значения i, которые равномерно распределены на отрезке [a, b], который описывается следующей функцией вероятности:
    • operator (): генерирует случайное число, которое распределяется в соответствии с функцией вероятности.
    • min: возвращает наибольшую нижнюю границу диапазона значений, возвращаемых operator (), который является параметром распределения «a» дляiform_int_distribution.
    • max: возвращает наименьшую верхнюю границу диапазона значений, возвращаемых operator (), который является параметром распределения 'b' дляiform_int_distribution.
    • сброс: сбрасывает распределение, так что при последующем использовании результат не зависит от уже созданных им значений.

    // C ++ программа для иллюстрации
    // использование оператора ()
    // в равномерном_инт_распределении
    #include <iostream>
    #include <random>

    using namespace std;

      
    // Драйвер программы

    int main()

    {

          

        // Построение тривиального генератора случайных чисел

        unsigned s = 2;

          

        // Генератор случайных чисел

        default_random_engine generator (s);

          

        uniform_int_distribution<int> distribution(1,10);

        cout << "Some random numbers between 1 and 10";

        for (int i = 0; i < 10; ++i)

            cout << distribution(generator) ;

          

        cout << endl;

          

        return 0;

    }

    Выход:

    Some random numbers between 1 and 10: 1 3 6 10 1 5 1 4 4 9 
    

    // C ++ программа для иллюстрации
    // использование сброса
    // в равномерном_инт_распределении
    #include <iostream>
    #include <random>

    using namespace std;

      
    // Драйвер программы

    int main()

    {

              

        // генератор случайных чисел

        default_random_engine generator;

          

        // Инициализация равномерного распределения

        uniform_int_distribution<int> distribution(1, 1000);

          

        // Первое случайное число генерируется

        cout << distribution(generator) << endl;

          

        // Сбрасывает распределение

        distribution.reset();

          

        // Второе случайное число

        // генерируется независимо от предыдущего числа

        cout << distribution(generator) << endl;

          

        return 0;

    }

    Выход:

    1
    132
    
  2. iform_real_distribution: распределение случайных чисел создает значения с плавающей запятой, которые описываются следующей функцией плотности вероятности:
    • operator (): возвращает новое случайное число, соответствующее параметрам распределения.
    • min: возвращает наибольшую нижнюю границу диапазона значений, возвращаемых оператором (), который является параметром распределения «a» дляiform_real_distribution.
    • max: возвращает наименьшую верхнюю границу диапазона значений, возвращаемых operator (), который является параметром распределения «b» дляiform_real_distribution.
    • сброс: сбрасывает распределение, так что при последующем использовании результат не зависит от уже созданных им значений.

    // C ++ программа для иллюстрации
    // использование оператора ()
    // в равномерном_инт_распределении
    #include <iostream>
    #include <random>

    using namespace std;

      
    // Драйвер программы

    int main()

    {

          

        // Построение тривиального генератора случайных чисел

        unsigned s = 2;

          

        // Генератор случайных чисел

        default_random_engine generator (s);

          

        uniform_int_distribution<int> distribution(1,10);

        cout << "Random numbers between 1 and 10";

        for (int i = 0; i< 10; ++i)

            cout << distribution(generator) ;

          

        cout << endl;

          

        return 0;

    }

    Выход:

    some random numbers between 0.0 and 10.0: 
    0.150031
    9.77072
    3.36669
    7.06447
    5.11455
    8.43061
    1.93792
    7.78965
    8.31532
    5.14354
    

    // C ++ программа для иллюстрации
    // использование сброса
    // в форме
    #include <iostream>
    #include <random>

    using namespace std;

      
    // Драйвер программы

    int main()

    {

        default_random_engine generator;

        uniform_real_distribution<double> distribution(0.0,100.0);

          

        // Он печатает два независимых значения:

        // Первое случайное число генерируется

        cout << distribution(generator) << endl;

          

        // Сбрасывает распределение

        distribution.reset();

          

        // Второе случайное число

        // генерируется независимо от предыдущего числа

        cout << distribution(generator) << endl;

          

        return 0;

    }

    Выход:

    13.1538
    45.865
    

II. Связанные с испытаниями Бернулли:

  1. bernoulli_distribution: Распределение случайных чисел генерирует значения bool в соответствии с распределением Бернулли, заданным следующей функцией вероятности:
    • operator (): возвращает новое случайное число.
    • min: возвращает наибольшую нижнюю границу диапазона значений, возвращаемых operator (), который для bernoulli_distribution равен false.
    • max: возвращает наименьшую верхнюю границу диапазона значений, возвращаемых operator (), что для bernoulli_distribution равно true.

    // C ++ программа для иллюстрации
    // bernoulli_distribution
    #include <iostream>
    #include <random>

    using namespace std;

      
    // Драйвер программы

    int main()

    {

        const int temp=500;

          

        // Генератор случайных чисел

        default_random_engine generator;

          

        // Инициализация распределения Бернулли

        bernoulli_distribution distribution(0.7);

          

        // посчитаем количество истин

        int count=0; 

          

        for (int i = 0; i < temp; ++i) 

        {

              

            // проверка на истинное состояние

            if (distribution(generator)) 

            count++;

        }

          

        cout << "bernoulli_distribution (0.7) x 500:" << endl;

        cout << "true: " << count << endl;

        cout << "false: " << temp-count << endl;

          

        return 0;

    }

    Выход:

    bernoulli_distribution (0.7) x 500:
    true:  360
    false: 140
    

    // C ++ программа для
    // иллюстрируем использование сброса
    #include <iostream>
    #include <random>

    using namespace std;

      
    // Драйвер программы

    int main()

    {

        // Генератор случайных чисел

        default_random_engine generator;

          

        // Инициализация распределения Бернулли

        bernoulli_distribution distribution;

          

        // выводим два независимых значения:

        cout << distribution(generator) << endl;

          

        // использование сброса

        // Создает второй вывод без

        // эффект первого вывода

        distribution.reset();

        cout << distribution(generator) << endl;

      

    return 0;

    }

    Выход:

    1
    1
    
  2. binomial_distribution: это распределение случайных чисел, которое производит целые числа в соответствии с биномиальным дискретным распределением, которое задается этой функцией вероятности:
    • operator (): генерирует новое случайное число.
    • max: возвращает наименьшую верхнюю границу диапазона, заданного оператором (), который для binomial_distribution является параметром распределения t.
    • min: возвращает наибольшую нижнюю границу диапазона, заданного оператором member (), который для binomial_distribution всегда равен нулю.
    • reset: сбрасывает распределение, поэтому последующее использование объекта не зависит от уже созданных им значений.

    // C ++ программа для иллюстрации
    // использование binomial_distribution
    #include <iostream>
    #include <chrono>
    #include <random>

    using namespace std;

      

    int main()

    {

          

        // построить случайное случайное

        // генераторный генератор из основанного на времени семени:

        unsigned seed = chrono::system_clock::now().time_since_epoch().count();

        default_random_engine generator (seed);

          

        // Инициализация биномиального распределения

        binomial_distribution<int> distribution (15, 0.4);

          

        cout << "some binomial results (t=15, p=0.4): ";

        for (int i = 0; i < 15; ++i)

        {

                  

            // Использование оператора ()

            cout << distribution(generator) << " ";

        }

        cout << endl;

          

        return 0;

    }

    Выход:

    some binomial results (t=15, p=0.4): 7 6 7 8 4 6 7 6 9 3 5 6 4 6 7 
    

    // C ++ программа для иллюстрации
    // использование binomial_distribution
    #include <iostream>
    #include <chrono>
    #include <random>

    using namespace std;

      

    int main()

    {

          

        // построить случайное случайное

        // генераторный генератор из основанного на времени семени:

        unsigned seed = chrono::system_clock::now().time_since_epoch().count();

        default_random_engine generator (seed);

          

        // Инициализация биномиального распределения

        binomial_distribution<int> distribution (15, 0.4);

          

        cout << "some binomial results (t=15, p=0.4): ";

        for (int i = 0; i < 15; ++i)

        {

                  

            // Использование оператора ()

            cout << distribution(generator) << " ";

        }

        cout << endl;

          

        return 0;

    }

    Выход:

    57
    52
    
  3. геометрическое распределение: это распределение случайных чисел, которое производит целые числа в соответствии с геометрическим дискретным распределением, заданным следующей функцией вероятности:
    • operator (): возвращает новое случайное число, соответствующее параметрам распределения.
    • max: возвращает наименьшую верхнюю границу диапазона, заданного оператором ().
    • min: возвращает минимальное значение, заданное оператором ().
    • reset: сбрасывает распределение, поэтому последующее использование объекта не зависит от уже созданных им значений.

    // C ++ программа для иллюстрации
    // использование геометрического распределения
    #include <iostream>
    #include <chrono>
    #include <string>
    #include <random>

    using namespace std;

      

    int main()

    {

        // построить случайное случайное

        // генераторный генератор из основанного на времени семени:

        int seed = chrono::system_clock::now().time_since_epoch().count();

        default_random_engine generator (seed);

          

        // Инициализирует геометрическое распределение

        geometric_distribution<int> distribution (1.0 / 5);

          

        cout << "Plus sign is 5 spaces away from the next :" << endl;

        for (int i = 0; i < 10 ; ++i) 

        {

            int number = distribution(generator);

            cout << string (number,' ') << "+";

        }

      

    return 0;

    }

    Выход:

    each plus sign is 5 spaces away from the next :
                ++ + +   +  ++     +        ++
    

    // C ++ программа для иллюстрации
    // использование сброса
    #include <iostream>
    #include <random>

    using namespace std;

      
    // Драйвер программы

    int main()

    {

          

        // Генератор случайных чисел

        default_random_engine generator;

          

        // Инициализация геометрического распределения

        geometric_distribution<int> distribution(0.3);

          

        // Печатает два независимых значения:

        // Генерирует первое значение

        cout << distribution(generator) << endl;

          

        // Использование сброса

        distribution.reset();

          

        // Генерирует второе значение

        cout << distribution(generator) << endl;

          

        return 0;

    }

    Выход:

    0
    1
    
  4. absolute_binomial_distribution: это распределение случайных чисел, которое производит целые числа в соответствии с отрицательным биномиальным дискретным распределением (также известным как распределение Паскаля), заданным следующей функцией вероятности:
    • operator (): возвращает новое случайное число, которое следует параметрам распределения.
    • max: возвращает наименьшую верхнюю границу диапазона, заданного оператором ().
    • min: возвращает минимальное значение, заданное operator (), которое для absolute_binomial_distribution всегда равно нулю.
    • reset: сбрасывает распределение, поэтому последующее использование объекта не зависит от уже созданных им значений.

    // C ++ программа для иллюстрации
    // использование оператора () в
    // absolute_binomial_distribution
    #include <iostream>
    #include <chrono>
    #include <random>

    using namespace std;

      
    // Драйвер программы

    int main()

    {

        // построить случайное случайное

        // генераторный генератор из основанного на времени семени:

        unsigned seed = chrono::system_clock::now().time_since_epoch().count();

        default_random_engine generator (seed);

          

        // Инициализация отрицательного биномиального распределения

        negative_binomial_distribution<int> distribution (6,0.7);

          

        cout << "Negative binomial results (t=6, p=0.7): ";

        for (int i = 0; i < 15; ++i)

            {

                // Использование оператора

                cout << distribution(generator) << " ";

            }

          

        cout << endl;

          

        return 0;

    }

    Выход:

    Negative binomial results (t=6, p=0.7): 2 6 3 1 4 1 4 1 2 0 7 3 4 4 4 
    

    // C ++ программа для иллюстрации
    // использование сброса в
    // absolute_binomial_distribution ::
    #include <iostream>
    #include <random>

    using namespace std;

      
    // Драйвер программы

    int main()

    {

          

        // Генератор случайных чисел

        default_random_engine generator;

          

        // Инициализация отрицательного биномиального распределения

        negative_binomial_distribution<int> distribution(20, 0.5);

          

        // выводим два независимых значения:

        // Генерирует первое значение

        cout << distribution(generator) << endl;

          

        // Использование сброса

        distribution.reset();

          

        // Генерирует второе значение

        cout << distribution(generator) << endl;

          

        return 0;

    }

    Выход:

    23
    30
    

Распределение по частям III.

  1. discrete_distribution: это распределение случайных чисел, которое производит целочисленные значения в соответствии с дискретным распределением.
    • operator (): возвращает новое случайное число, соответствующее параметрам распределения.
    • max: возвращает наименьшую верхнюю границу диапазона, заданного оператором ().
    • min: возвращает наибольшую нижнюю границу диапазона, заданного оператором ().
    • reset: сбрасывает распределение, поэтому последующее использование объекта не зависит от уже созданных им значений.

    // C ++ программа для иллюстрации
    // использование оператора () в
    // discrete_distribution
    #include <iostream>
    #include <random>

    using namespace std;

      

    int main()

    {

          

        // количество экспериментов

        int n = 10000; 

          

        // максимальное количество звезд для распределения

        int m = 100; 

          

        // Генератор случайных чисел

        default_random_engine generator;

          

        // Инициализация дискретного распределения

        discrete_distribution<int> distribution { 2, 2, 1, 1, 2, 2, 1, 1, 2, 2 };

          

        int p[10] = {};

          

        // использование оператора ()

        for (int i = 0; i < n; i++) 

        {

            int number = distribution(generator);

            p[number]++;

        }

          

        cout << "a discrete_distribution:" << endl;

        for (int i = 0; i < 10; ++i)

        {

            cout << i << ": " << string(p[i]*m/n,'*') << endl;

        }

          

        return 0;

    }

    Выход:

    a discrete_distribution:
    0: ************
    1: *************
    2: *****
    3: ******
    4: ************
    5: ************
    6: ******
    7: ******
    8: ************
    9: ************
    

    // C ++ программа для иллюстрации
    // использование сброса в
    // discrete_distribution
    #include <iostream>
    #include <random>

    using namespace std;

      
    // Драйвер программы

    int main()

    {

          

        // Генератор случайных чисел

        default_random_engine generator;

          

        // Инициализация дискретного распределения

        discrete_distribution<int> distribution {20,20,30,40};

          

        // выводим два независимых значения:

        // Генерирует первое значение

        cout << distribution(generator) << endl;

          

        // Использование сброса

        distribution.reset();

          

        // Генерирует значение secong

        cout << distribution(generator) << endl;

          

        return 0;

    }

    Выход:

    0
    2
    
  2. piecewise_constant_distribution: это распределение случайных чисел, которое генерирует значения с плавающей запятой, которые равномерно распределены по каждой из последовательных смежных подинтервалов, заданных следующей функцией плотности вероятности:
    • operator (): возвращает новое случайное число, соответствующее параметрам распределения.
    • max: возвращает наименьшую верхнюю границу диапазона, заданного оператором ().
    • min: возвращает наибольшую нижнюю границу диапазона, заданного оператором ().
    • reset: сбрасывает распределение, поэтому последующее использование объекта не зависит от уже созданных им значений.

    // C ++ программа для иллюстрации
    // использование сброса в
    // piecewise_constant_distribution
    #include <iostream>
    #include <random>

    using namespace std;

      
    // Драйвер программы

    int main()

    {

          

        // Генератор случайных чисел

        default_random_engine generator;

          

        // Initialisind piecewise_constant_distribution

        piecewise_constant_distribution<double> distribution 

                    ( 4, 0.0, 10.0, [](double x){return x;} );

          

        // выводим два независимых значения:

        // Генерирует первое значение

        // Использование оператора ()

        cout << distribution(generator) << endl;

          

        // Использование сброса

        distribution.reset();

          

        // Генерирует второе значение

        cout << distribution(generator) << endl;

          

        return 0;

    }

    Выход:

    3.4205
    6.6692
    
  3. piecewise_linear_distribution: это распределение случайных чисел, которое создает значения с плавающей запятой, которые распределены по последовательности смежных подинтервалов.
    • operator (): возвращает новое случайное число, соответствующее параметрам распределения.
    • max: возвращает наименьшую верхнюю границу диапазона, заданного оператором ().
    • min: возвращает наибольшую нижнюю границу диапазона, заданного оператором ().
    • reset: сбрасывает распределение, поэтому последующее использование объекта не зависит от уже созданных им значений.

    // C ++ программа для иллюстрации
    // использование сброса в
    // piecewise_linear_distribution
    #include <iostream>
    #include <random>

    using namespace std;

      
    // Драйвер программы

    int main()

    {

          

        // Генератор случайных чисел

        default_random_engine generator;

          

        // Инициализация piecewise_linear_distribution

        piecewise_linear_distribution<double>

            distribution ( 5, 0.0, 10.0, [](double x){return x+1.0;} );

          

        // выводим два независимых значения:

        // генерирует первое значение

        // использование оператора ()

        cout << distribution(generator) << endl;

          

        // Использование сброса

        distribution.reset();

          

        // генерирует второе значение

        cout << distribution(generator) << endl;

          

        return 0;

    }

    Выход:

    2.48143
    6.07656
    

Эта статья предоставлена Шамбхави Сингхом . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

случайный заголовок | Набор 2 (Распределения)

0.00 (0%) 0 votes