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

Опубликовано: 7 Января, 2022

Мы обсудили генераторы в Наборе 1. Мы также обсудили три дистрибутива в Наборе 2. В этом посте обсуждаются другие дистрибутивы.

IV.Распределение по ставкам:

распределение Пуассона Распределение Пуассона
экспоненциальное_распределение Экспоненциальное распределение
gamma_distribution Гамма-распределение
weibull_distribution Распределение Вейбулла
extreme_value_distribution Распределение экстремальных ценностей

1. poisson_distribution: это распределение, которое производит целые числа в соответствии с распределением Пуассона, которое задается следующей функцией массы вероятности:

  • operator () : возвращает новое случайное число, соответствующее параметрам распределения.
  • min : возвращает наибольшую нижнюю границу диапазона значений, заданного оператором (), который в данном случае всегда равен нулю.
  • max : возвращает наименьшую верхнюю границу диапазона значений, заданного operator ().
  • reset : сбрасывает распределение, так что последующее использование объекта не зависит от уже созданных им значений.
  • param: It gets or sets the distribution parameter object .
    // Illustrating the use of operator() in 
    // poisson_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);
      
      poisson_distribution<int> distribution (7.1);
      
      cout << "Poisson-distribution(mean=5.0): ";
      for (int i=0; i<10; ++i)
        
        // use of operator()
        cout << distribution(generator) << " ";
      
      cout << endl;
      
      return 0;
    }

    Output:

    Poisson-distribution(mean=5.0): 11 5 5 9 10 6 15 3 6 5 
    

    2. exponential_distribution: It is a random number distribution that produces floating-point values according to an exponential distribution, given by:

  • operator () : он генерирует случайные числа, которые распределяются в соответствии с функцией вероятности.
  • max : возвращает наименьшую верхнюю границу диапазона, заданного оператором ().
  • max : возвращает наибольшую нижнюю границу диапазона, заданного оператором (), который всегда равен нулю для exponential_distribution.
  • reset : сбрасывает распределение, так что при последующих использованиях результат не зависит от уже созданных им значений.
  • param: It gets or sets the distribution parameter object .
    // Illustrating the use of  operator() in 
    // exponential_distribution 
    #include <iostream>
    #include <chrono>
    #include <thread>
    #include <random>
    using namespace std;
      
    // Driver program
    int main()
    {
      // It constructs 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);
      
      exponential_distribution<double> distribution (1.0);
        
      cout << "Hi"s separated by 2 seconds, on average: ";
      for (int i=0; i<5; ++i) 
      {      
        // use of operator()
        double number = distribution(generator);
        chrono::duration<double> period (number);
          
        // It makes the thread sleep 
        // for the time period(i.e. number)
        this_thread::sleep_for( period );
        cout << "Hi,Geeks!!" << endl;
      }
      
      return 0;
    }

    Output:

    Hi"s separated by 2 seconds, on average: 
    Hi,Geeks!!
    Hi,Geeks!!
    

    3. gamma_distribution: It is a random number distribution that produces floating-point values according to a gamma distribution, given by:

  • operator () : возвращает новое случайное число, соответствующее параметрам распределения.
  • min : возвращает наибольшую нижнюю границу диапазона, заданного элементом operator (), который всегда равен нулю для gamma_distribution.
  • max : возвращает наименьшую верхнюю границу диапазона, заданного оператором ().
  • reset : сбрасывает распределение, так что при последующих использованиях результат не зависит от уже созданных им значений.
  • param: It gets or sets the distribution parameter object .
    // Illustrating the use of reset in gamma_distribution
    #include <iostream>
    #include <random>
    using namespace std;
       
    // Driver program
    int main()
    {     
      // Random number generator
      default_random_engine generator;
      gamma_distribution<double> distribution(1.0,2.0);
       
      // prints first random number
      cout << distribution(generator) << endl;
         
      // use of reset 
      distribution.reset();
         
      // prints the second random number 
      // independent of first
      cout << distribution(generator) << endl;
       
      return 0;
    }

    Output:

    1.14392
    2.23359
    

    4. weibull_distribution:It is a random number distribution that produces floating-point values according to a 2-parameter Weibull distribution,given by:

  • operator () : возвращает новое случайное число, соответствующее параметрам распределения.
  • min : возвращает наибольшую нижнюю границу диапазона, заданного оператором (), который всегда равен нулю для weibull_distribution.
  • max : возвращает наименьшую верхнюю границу диапазона, заданного оператором ().
  • reset : сбрасывает распределение, так что при последующих использованиях результат не зависит от уже созданных им значений.
  • param: It gets or sets the distribution parameter object .
    // Illustrating the use of min and max
    // in weibull_distribution
    #include <iostream>
    #include <chrono>
    #include <random>
    using namespace std;
      
    // Driver program
    int main ()
    {   
      // It constructs 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);
      
      weibull_distribution<double> distribution (2.0,1.0);
      
      cout << distribution(generator) 
           << " is a random number between ";
        
      // use of min and max
      cout << generator.min() << " and " << generator.max();
        
      return 0;
    }

    Output:

    1.54229 is a random number between 1 and 2147483646
    

    5. extreme_value_distribution:It is a random number distribution that produces floating-point values according to a Type I extreme value distribution,given by:

  • operator () : он генерирует случайные числа, которые распределяются в соответствии с функцией вероятности.
  • min : возвращает наибольшую нижнюю границу диапазона, заданного оператором-членом ().
  • max : возвращает наименьшую верхнюю границу диапазона, заданного оператором-членом ().
  • reset : сбрасывает распределение, так что при последующих использованиях результат не зависит от уже созданных им значений.
  • param: It gets or sets the distribution parameter object .
    // Illustrating the use of param in 
    // extreme_value_distribution
    #include <iostream>
    #include <random>
    using namespace std;
      
    // Driver program
    int main()
    {
      default_random_engine generator;
      extreme_value_distribution<double> d1(2.0,4.0);
      extreme_value_distribution<double> d2(d1.param());
      
      // prints the first value
      cout << d1(generator) << endl;
        
      // prints the second independent value 
      cout << d2(generator) << endl;
      
      return 0;
    }

    Output:

    9.8351
    3.95306
    

    V. Related to Normal distribution



    normal_distributionNormal Distribution
    lognormal_distributionLognormal Distribution
    chi_squared_distributionChi-squared Distribution
    cauchy_distributionCauchy Distribution
    fisher_f_distributionFisher F-Distribution
    student_t_distributionStudent T-Distribution

    1. normal_distribution: It is a random number distribution that produces floating-point values according to a normal distribution, given by:

    where:
     (µ) :mean 
     sigma :standard deviation
    
  • operator():It generates the random number that are distributed according to the probability function.
  • min:It returns the greatest lower bound of the range given by operator().
  • max:It returns the least upper bound of the range given by operator().
  • reset:It resets the distribution, so that on the subsequent uses the result does not depends on the values already produced by it.
  • param: It gets or sets the distribution parameter object .
    // Illustrating the use of operator()
    // in normal_distribution 
    #include <iostream>
    #include <chrono>
    #include <random>
    using namespace std;
      
    // Driver program
    int main()
    {
      // It constructs 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);
      
      // Initializes the normal distribution
      normal_distribution<double> distribution (1.0,2.0);
      
      cout << "Normal-distribution(1.0,2.0):" << endl;
      for (int i=0; i<5; i++)  
        // Use of  operator()
        cout << distribution(generator) << endl;
      
      return 0;
    }

    Output:

    Normal-distribution(1.0,2.0):
    1.59499
    -0.458303
    1.34411
    0.138838
    3.03433
    

    2. lognormal_distribution:It is a random number distribution that produces floating-point values according to a lognormal distribution, given by:

  • operator():It generates a random number which follows this distribution.
  • min:It returns the greatest lower bound of the range given by operator(), which is always zero for lognormal_distribution.
  • max:It returns the least upper bound of the range given by operator().
  • reset:It resets the distribution, so that on the subsequent uses the result does not depends on the values already produced by it.
  • param: It gets or sets the distribution parameter object .
    // Illustrating the use of reset in 
    // lognormal_distribution
    #include <iostream>
    #include <random>
    using namespace std;
      
    // Driver program
    int main()
    {
      // the random number generator
      default_random_engine generator;
      lognormal_distribution<double> distribution(1.0,2.0);
      
      // prints first value:
      cout << distribution(generator) << endl;
        
      // Use of reset
      distribution.reset();
        
      // prints second value independent of first
      cout << distribution(generator) << endl;
      
      return 0;
    }

    Output:

    2.12989
    10.6822
    

    3. chi_squared_distribution:It is a random number distribution that produces floating-point values according to a chi-squared distribution,given by:

    where,
    n : degrees of freedom and n>0,
    n/2 : shape parameter
    
  • operator():It generates the random number that are distributed according to the probability function.
  • min:It returns the greatest lower bound of the range given by operator(), which is always zero for the chi_squared_distribution.
  • max:It returns the least upper bound of the range given by operator().
  • reset:It resets the distribution, so that on the subsequent uses the result does not depends on the values already produced by it.
  • param: It gets or sets the distribution parameter object .
    // Illustrating the use of operator() in 
    // chi_squared_distribution 
    #include <iostream>
    #include <chrono>
    #include <random>
    using namespace std;
      
    // Driver program
    int main()
    {
      // It constructs 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);
      
      chi_squared_distribution<double> distribution (4.0);
      
      cout << "chi-squared-distribution(4.0):" << endl;
      for (int i=0; i<5; i++)
          
        // use of operator()
        cout << distribution(generator) << endl;
      
      return 0;
    }

    Output:

    chi-squared-distribution(4.0):
    2.18701
    6.86953
    1.77983
    9.79626
    5.04758
    

    4. cauchy_distribution:It is a random number distribution that produces floating-point values according to a Cauchy distribution, given by:

    where,
    a and b are distribution parameters
    
  • operator():It generates the random number that are distributed according to the probability function.
  • min:It returns the greatest lower bound of the range given by operator().
  • max:It returns the least upper bound of the range given by operator().
  • reset: It resets the distribution, so that on the subsequent uses the result does not depends on the values already produced by it.
  • param: It gets or sets the distribution parameter object .
    // Illustrating the use of param
    // in cauchy_distribution
    #include <iostream>
    #include <random>
    using namespace std;
      
    // Driver program
    int main()
    {
      default_random_engine generator;
      cauchy_distribution<double> d1(0.0,1.0);
      cauchy_distribution<double> d2(d1.param());
      
      // prints the first value
      cout << d1(generator) << endl;
        
      // prints the second value
      cout << d2(generator) << endl;
      
      return 0;
    }

    Output:

    0.438486
    7.65462
    

    5. fisher_f_distribution:It is a random number distribution that produces floating-point values according to a Fisher F-distribution, given by:

    It produces random numbers by dividing two independent Chi-squared distributions of m and n degrees of freedom.

  • operator():It generates the random number that are distributed according to the probability function.
  • min:It returns the greatest lower bound of the range given by operator(), which is always zero for the fisher_f_distribution.
  • max:It returns the least upper bound of the range given by operator().
  • reset: It resets the distribution, so that on the subsequent uses the result does not depends on the values already produced by it.
  • param: It gets or sets the distribution parameter object .
    // Illustrating the use of 
    // operator() in fisher_f_distribution 
    #include <iostream>
    #include <chrono>
    #include <random>
    using namespace std;
      
    // Driver program
    int main()
    {
      // It constructs 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);
      
      fisher_f_distribution<double> distribution (1.0,2.0);
      
      cout << "fisher-f-distribution(1.0,2.0):" << endl;
      for (int i=0; i<5; i++)
          
        // use of operator()
        cout << distribution(generator) << endl;
      
      return 0;
    }

    Output:

    fisher-f-distribution(1.0,2.0):
    0.208066
    2.76882
    0.0305701
    0.96243
    0.444256
    

    6. student_t_distribution:It is a random number distribution that produces floating-point values according to a Student T-distribution, given by:

    where,
    n is the distribution parameter
    
  • operator():It generates the random number that are distributed according to the probability function.
  • min:It returns the greatest lower bound of the range given by operator().
  • max:It returns the least upper bound of the range given by operator().
  • reset: It resets the distribution, so that on the subsequent uses the result does not depends on the values already produced by it.
  • param: It gets or sets the distribution parameter object .
    // Illustrating the use of min and max
    // in student_t_distribution
    #include <iostream>
    #include <chrono>
    #include <random>
    using namespace std;
       
    // Driver program
    int main ()
    {     
      // It constructs 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);
       
      student_t_distribution<double> distribution (8.0);
       
      cout << distribution(generator) 
           << " is a random number between ";
         
      // use of min and max
      cout << generator.min() << " and " << generator.max();
         
      return 0;
    }

    Output:

    0.00906058 is a random number between 1 and 2147483646

    This article is contributed by Shambhavi Singh. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

    Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

    Want to learn from the best curated videos and practice problems, check out the C++ Foundation Course for Basic to Advanced C++ and C++ STL Course for foundation plus STL.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.
  • C++