📌  相关文章
📜  C++中的std :: uniform_real_分发类,包含示例

📅  最后修改于: 2021-05-30 04:39:29             🧑  作者: Mango

在概率中,均匀分布函数是指在连续随机变量上定义概率的分布,该随机变量可以取两个数之间的任何值,然后将该分布称为连续概率分布。例如,可以通过连续的随机变量来表示给定一天的温度,并且可以说相应的概率分布是连续的。

     \[ f(x) =  \frac{1}{b-a}, & a\leq x < b\\ \]

C++在随机库中引入了Uniform_real_distribution类,该类的成员函数给出具有给定概率的给定输入范围内的随机实数或连续值。

Uniform_real_distribution类中的公共成员函数:

  1. 运算符():此函数返回给定范围内的随机值。返回值的数据类型是在模板类的初始化期间指定的。任何值的概率都是相同的。此操作的时间复杂度为O(1)。

    例子:

    // C++ code to demonstrate the working of
    // operator() function
      
    #include 
      
    // for uniform_real_distribution function
    #include 
      
    using namespace std;
      
    int main()
    {
        // Here default_random_engine object
        // is used as source of randomness
        // We can give seed also to default_random_engine
        // if psuedorandom numbers are required
        default_random_engine generator;
      
        double a = 0.0, b = 1.0;
      
        // Initializing of uniform_real_distribution class
        uniform_real_distribution distribution(a, b);
      
        // number of experiments
        const int num_of_exp = 10000000;
        // number of ranges
        int n = 100;
        int p[n] = {};
        for (int i = 0; i < num_of_exp; ++i) {
      
            // using operator() function
            // to give random values
            double number = distribution(generator);
            ++p[int(number * n)];
        }
      
        cout << "Probability of some ranges" << endl;
        // Displaying the probability of some ranges
        // after generating values 10000 times.
        cout << "0.50-0.51"
             << " " << (float)p[50] / (float)num_of_exp << endl;
        cout << "0.60-0.61"
             << " " << (float)p[60] / (float)num_of_exp << endl;
        cout << "0.45-0.46"
             << " " << (float)p[45] / (float)num_of_exp << endl;
        return 0;
    }
    
    输出:
    Probability of some ranges
    0.50-0.51 0.0099808
    0.60-0.61 0.0099719
    0.45-0.46 0.009999
    

    所有范围的概率几乎相等。

    其他成员函数是:

  2. a():返回范围的下限。
  3. b():返回范围的上限。
  4. min():返回函数可以返回的最小值。对于均匀分布,min()和a()返回相同的值。
  5. max():返回函数可以返回的最小值。对于均匀分布,min()和a()返回相同的值。
  6. reset():此函数重置分布,以使生成的下一个随机值不基于先前的值。

例子:

// C++ code to demonstrate the working of
// a(), b(), min(), max(), reset() function
  
#include 
  
// for uniform_real_distribution function
#include 
  
using namespace std;
  
int main()
{
    double a = 0, b = 1.5;
  
    // Initializing of uniform_real_distribution class
    uniform_real_distribution distribution(a, b);
  
    // Using a() and b()
    cout << "Lower Bound"
         << " " << distribution.a() << endl;
    cout << "Upper Bound"
         << " " << distribution.b() << endl;
  
    // Using min() and max()
    cout << "Minimum possible output"
         << " " << distribution.min() << endl;
    cout << "Maximum possible output"
         << " " << distribution.max() << endl;
  
    // Using reset function
    distribution.reset();
  
    return 0;
}
输出:
Lower Bound 0
Upper Bound 1.5
Minimum possible output 0
Maximum possible output 1.5

参考:
http://www.cplusplus.com/reference/random/uniform_real_distribution/

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”