随机标题|集2(分布)

第1组(发电机)

null

分配

一、制服: uniform

  1. 均匀分布: 它产生随机整数值i,其均匀分布在闭合区间[a,b]上,由以下概率质量函数描述: function
    • 运算符(): 它生成根据概率函数分布的随机数。
    • 敏: 它返回运算符()返回的值范围的最大下限,这是均匀分布的分布参数“a”。
    • 最大值: 它返回运算符()返回的值范围的最小上界,这是均匀分布的分布参数“b”。
    • 重置: 它重置分布,以便在后续使用时,结果不依赖于它已经生成的值。

    // C++ program to illustrate
    // the use of operator()
    // in uniform_int_distribution
    #include <iostream>
    #include <random>
    using namespace std;
    // Driver program
    int main()
    {
    // Constructing a trivial random generator engine
    unsigned s = 2;
    // The random number generator
    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++ program to illustrate
    // the use of reset
    // in uniform_int_distribution
    #include <iostream>
    #include <random>
    using namespace std;
    //Driver program
    int main()
    {
    //the random number generator
    default_random_engine generator;
    // Initialising the uniform distribution
    uniform_int_distribution< int > distribution(1, 1000);
    // First random number is generated
    cout << distribution(generator) << endl;
    //Resets the distribution
    distribution.reset();
    // Second random number is
    //generated independent of previous number
    cout << distribution(generator) << endl;
    return 0;
    }

    
    

    输出:

    1
    132
    
  2. 均匀实分布: 产生浮点值的是随机数分布,由以下概率密度函数描述: uniform_real
    • 运算符(): 它返回一个跟随分布参数的新随机数。
    • 敏: 它返回运算符()返回的值范围的最大下限,这是均匀实分布的分布参数“a”。
    • 最大值: 它返回运算符()返回的值范围的最小上界,这是均匀实分布的分布参数“b”。
    • 重置: 它重置分布,以便在后续使用时,结果不依赖于它已经生成的值。

    // C++ program to illustrate
    // the use of operator()
    // in uniform_int_distribution
    #include <iostream>
    #include <random>
    using namespace std;
    // Driver program
    int main()
    {
    // Constructing a trivial random generator engine
    unsigned s = 2;
    // The random number generator
    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++ program to illustrate
    // the use of reset
    // in uniform_real_distribution
    #include <iostream>
    #include <random>
    using namespace std;
    // Driver program
    int main()
    {
    default_random_engine generator;
    uniform_real_distribution< double > distribution(0.0,100.0);
    // It prints two independent values:
    // First random number is generated
    cout << distribution(generator) << endl;
    //Resets the distribution
    distribution.reset();
    // Second random number is
    //generated independent of previous number
    cout << distribution(generator) << endl;
    return 0;
    }

    
    

    输出:

    13.1538
    45.865
    

二、与伯努利试验有关: related to bernoulli trials

  1. 伯努利分布: 正是随机数分布根据伯努利分布产生布尔值,由以下概率质量函数给出: function
    • 运算符(): 它返回一个新的随机数。
    • 敏: 它返回运算符()返回的值范围的最大下限,对于bernoulli_分布,该下限为false。
    • 最大值: 它返回运算符()返回的值范围的最小上界,这对于伯努利分布是正确的。

    // C++ program to illustrate
    // the bernoulli_distribution
    #include <iostream>
    #include <random>
    using namespace std;
    //Driver program
    int main()
    {
    const int temp=500;
    //The random number generator
    default_random_engine generator;
    //Initialising the bernoulli distribution
    bernoulli_distribution distribution(0.7);
    // count number of trues
    int count=0;
    for ( int i = 0; i < temp; ++i)
    {
    // checking for true condition
    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++ program to
    // illustrate the use of reset
    #include <iostream>
    #include <random>
    using namespace std;
    //Driver program
    int main()
    {
    // Random number generator
    default_random_engine generator;
    // Initialising the bernoulli distribution
    bernoulli_distribution distribution;
    // print two independent values:
    cout << distribution(generator) << endl;
    // use of reset
    // Generates second output without
    // the effect of first output
    distribution.reset();
    cout << distribution(generator) << endl;
    return 0;
    }

    
    

    输出:

    1
    1
    
  2. 二项分布: 正是随机数分布根据二项式离散分布产生整数,该分布由概率质量函数给出: binomial_distribution
    • 运算符(): 它会生成一个新的随机数。
    • 最大值: 它返回运算符()给出的范围的最小上界,对于二项式分布,它是分布参数t。
    • 敏: 它返回成员运算符()给出的范围的最大下界,对于二项式分布,该下界始终为零。
    • 重置: 它重置分布,以便对象的后续使用不依赖于它已经生成的值。

    // C++ program to illustrate
    // the use of binomial_distribution
    #include <iostream>
    #include <chrono>
    #include <random>
    using namespace std;
    int main()
    {
    // construct a trivial random
    //generator engine from a time-based seed:
    unsigned seed = chrono::system_clock::now().time_since_epoch().count();
    default_random_engine generator (seed);
    // Initialising binomial distribution
    binomial_distribution< int > distribution (15, 0.4);
    cout << "some binomial results (t=15, p=0.4): " ;
    for ( int i = 0; i < 15; ++i)
    {
    // Use of operator()
    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++ program to illustrate
    // the use of binomial_distribution
    #include <iostream>
    #include <chrono>
    #include <random>
    using namespace std;
    int main()
    {
    // construct a trivial random
    //generator engine from a time-based seed:
    unsigned seed = chrono::system_clock::now().time_since_epoch().count();
    default_random_engine generator (seed);
    // Initialising binomial distribution
    binomial_distribution< int > distribution (15, 0.4);
    cout << "some binomial results (t=15, p=0.4): " ;
    for ( int i = 0; i < 15; ++i)
    {
    // Use of operator()
    cout << distribution(generator) << " " ;
    }
    cout << endl;
    return 0;
    }

    
    

    输出:

    57
    52
    
  3. 几何分布: 它是一种随机数分布,根据几何离散分布产生整数,由以下概率质量函数给出: geometric_distribution
    • 运算符(): 它返回一个跟随分布参数的新随机数。
    • 最大值: 它返回运算符()给出的范围的最小上限。
    • 敏: 它返回运算符()给出的最小值。
    • 重置: 它重置分布,以便对象的后续使用不依赖于它已经生成的值。

    // C++ program to illustrate
    //the use of geometric_distribution
    #include <iostream>
    #include <chrono>
    #include <string>
    #include <random>
    using namespace std;
    int main()
    {
    // construct a trivial random
    // generator engine from a time-based seed:
    int seed = chrono::system_clock::now().time_since_epoch().count();
    default_random_engine generator (seed);
    // Initialises the geometric distribution
    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++ program to illustrate
    // the use of reset
    #include <iostream>
    #include <random>
    using namespace std;
    // Driver program
    int main()
    {
    // Random number generator
    default_random_engine generator;
    // Initialising the geometric distribution
    geometric_distribution< int > distribution(0.3);
    // Prints two independent values:
    // Generates the first value
    cout << distribution(generator) << endl;
    // Use of reset
    distribution.reset();
    // Generates second value
    cout << distribution(generator) << endl;
    return 0;
    }

    
    

    输出:

    0
    1
    
  4. 负二项分布: 它是一种随机数分布,根据负二项离散分布(也称为Pascal分布)生成整数,由以下概率质量函数给出: negative
    • 运算符(): 它返回一个新的随机数,该随机数跟随分布参数。
    • 最大值: 它返回运算符()给出的范围的最小上限。
    • 敏: 它返回运算符()给出的最小值,对于负二项分布,该值始终为零。
    • 重置: 它重置分布,以便对象的后续使用不依赖于它已经生成的值。

    // C++ program to illustrate
    // the use of operator() in
    // negative_binomial_distribution
    #include <iostream>
    #include <chrono>
    #include <random>
    using namespace std;
    // Driver program
    int main()
    {
    // construct a trivial random
    // generator engine from a time-based seed:
    unsigned seed = chrono::system_clock::now().time_since_epoch().count();
    default_random_engine generator (seed);
    // Initialising negative binomial distribution
    negative_binomial_distribution< int > distribution (6,0.7);
    cout << "Negative binomial results (t=6, p=0.7): " ;
    for ( int i = 0; i < 15; ++i)
    {
    // Use of operator
    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++ program to illustrate
    // the use of reset in
    // negative_binomial_distribution::
    #include <iostream>
    #include <random>
    using namespace std;
    // Driver program
    int main()
    {
    // Random number generator
    default_random_engine generator;
    // Initialising the negative binomial distribution
    negative_binomial_distribution< int > distribution(20, 0.5);
    // print two independent values:
    // Generates the first value
    cout << distribution(generator) << endl;
    // Use of reset
    distribution.reset();
    // Generates the second value
    cout << distribution(generator) << endl;
    return 0;
    }

    
    

    输出:

    23
    30
    

三、 分段分布: piecewise

  1. 离散分布: 它是一种随机数分布,根据离散分布生成整数值。
    • 运算符(): 它返回一个跟随分布参数的新随机数。
    • 最大值: 它返回运算符()给出的范围的最小上限。
    • 敏: 它返回运算符()给出的范围的最大下限。
    • 重置: 它重置分布,以便对象的后续使用不依赖于它已经生成的值。

    // C++ program to illustrate the
    // use of operator() in
    // discrete_distribution
    #include <iostream>
    #include <random>
    using namespace std;
    int main()
    {
    // number of experiments
    int n = 10000;
    // maximum number of stars to distribute
    int m = 100;
    // Random number generator
    default_random_engine generator;
    //Initialising discrete distribution
    discrete_distribution< int > distribution { 2, 2, 1, 1, 2, 2, 1, 1, 2, 2 };
    int p[10] = {};
    // use of operator()
    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++ program to illustrate
    //the use of reset in
    //discrete_distribution
    #include <iostream>
    #include <random>
    using namespace std;
    // Driver program
    int main()
    {
    // Random number generator
    default_random_engine generator;
    // Initialising the discrete distribution
    discrete_distribution< int > distribution {20,20,30,40};
    // print two independent values:
    // Generates the first value
    cout << distribution(generator) << endl;
    // Use of reset
    distribution.reset();
    // Generates the secong value
    cout << distribution(generator) << endl;
    return 0;
    }

    
    

    输出:

    0
    2
    
  2. 分段常数分布: 它是一种随机数分布,产生的浮点值均匀分布在一系列连续的子区间上,由以下概率密度函数给出: piecwise constant
    • 运算符(): 它返回一个跟随分布参数的新随机数。
    • 最大值: 它返回运算符()给出的范围的最小上限。
    • 敏: 它返回运算符()给出的范围的最大下限。
    • 重置: 它重置分布,以便对象的后续使用不依赖于它已经生成的值。

    // C++ program to illustrate the
    // use of reset in
    // piecewise_constant_distribution
    #include <iostream>
    #include <random>
    using namespace std;
    // Driver program
    int main()
    {
    // Random number generator
    default_random_engine generator;
    // Initialisind piecewise_constant_distribution
    piecewise_constant_distribution< double > distribution
    ( 4, 0.0, 10.0, []( double x){ return x;} );
    // print two independent values:
    // Generates the first value
    // Use of operator()
    cout << distribution(generator) << endl;
    // Use of reset
    distribution.reset();
    // Generates second value
    cout << distribution(generator) << endl;
    return 0;
    }

    
    

    输出:

    3.4205
    6.6692
    
  3. 分段线性分布: 它是一种随机数分布,产生分布在连续子区间序列上的浮点值。
    • 运算符(): 它返回一个跟随分布参数的新随机数。
    • 最大值: 它返回运算符()给出的范围的最小上限。
    • 敏: 它返回运算符()给出的范围的最大下限。
    • 重置: 它重置分布,以便对象的后续使用不依赖于它已经生成的值。

    // C++ program to illustrate the
    // use of reset in
    // piecewise_linear_distribution
    #include <iostream>
    #include <random>
    using namespace std;
    // Driver program
    int main()
    {
    // Random number generator
    default_random_engine generator;
    // Initialising piecewise_linear_distribution
    piecewise_linear_distribution< double >
    distribution ( 5, 0.0, 10.0, []( double x){ return x+1.0;} );
    // print two independent values:
    // generates first value
    // use of operator()
    cout << distribution(generator) << endl;
    // Use of reset
    distribution.reset();
    // generates second value
    cout << distribution(generator) << endl;
    return 0;
    }

    
    

    输出:

    2.48143
    6.07656
    

本文由 沙姆巴维·辛格 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。

如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享