zufälliger Header in C++ | Set 1 (Generatoren)

zufälliger Header in C++ | Set 1 (Generatoren)

Dieser Header führt Funktionen zur Zufallszahlengenerierung ein. Diese Bibliothek ermöglicht die Erzeugung von Zufallszahlen mithilfe von Kombinationen aus Generatoren und Verteilungen.

    Generatoren : Objekte, die gleichmäßig verteilte Zahlen erzeugen.
  • Verteilungen : Objekte, die von einem Generator generierte Zahlenfolgen in Zahlenfolgen umwandeln, die einer bestimmten Zufallsvariablenverteilung folgen, z. B. einer einheitlichen Normalverteilung oder einer Binomialverteilung.

Generatoren

I. Pseudozufallszahlen-Engines: Sie verwenden einen Algorithmus, um Zufallszahlen basierend auf einem anfänglichen Startwert zu generieren. Diese sind:

Zufallszahlen-Engines

1. linear_kongruential_engine : Es ist die einfachste Engine in der STL-Bibliothek, die zufällige vorzeichenlose Ganzzahlen generiert. Daraus folgt: 

 x = (a.x +c) mod m Where x= current state value a = multiplier parameter ; if m is not zero this parameter should be lower than m. c = increment parameter ; if m is not zero this parameter should be lower than m. m = modulus parameter  
    Operator(): Es generiert eine Zufallszahl. min: Es gibt den Mindestwert an, der vom Mitgliedsoperator() zurückgegeben wird. max: Es gibt den Maximalwert an, der vom Mitgliedsoperator() zurückgegeben wird.
C++
   // C++ program to illustrate   // the use of operator() max and min   // in linear_congruential_engine   #include          #include         #include         using     namespace     std  ;   // driver program   int     main     ()   {      // finds the time between the system clock      //(present time) and clock's epoch      unsigned     seed     =     chrono  ::  system_clock  ::  now  ().  time_since_epoch  ().  count  ();          // minstd_rand0 is a standard      // linear_congruential_engine      minstd_rand0     generator     (  seed  );             // generates the random number      cout      < <     generator  ()      < <     ' is a random number between '  ;          //use of min and max functions      cout      < <     generator  .  min  ()      < <     ' and '      < <     generator  .  max  ();          return     0  ;   }   

Ausgabe:

211182246 is a random number between 1 and 2147483646 

2. mersenne_twister_engine: Es handelt sich um eine Zufallszahlen-Engine, die auf dem Mersenne-Twister-Algorithmus basiert. Es erzeugt hochwertige vorzeichenlose ganzzahlige Zufallszahlen im Intervall [0 (2^w)-1].
Dabei ist „w“ die Wortgröße: Anzahl der Bits jedes Wortes in der Zustandssequenz. 

    Operator(): Es generiert die Zufallszahl. min: Es gibt den vom Mitglied „operator()“ zurückgegebenen Mindestwert zurück, der für „mersenne_twister_engine“ immer Null ist. max: Es gibt den vom Mitglied „operator()“ zurückgegebenen Maximalwert zurück, der für mersenne_twister_engine 2w-1 beträgt (wobei w die Wortgröße ist).
C++
   // C++ program to illustrate the use of    // operator() min and max   // in mersenne_twister_engine    #include          #include         #include         using     namespace     std  ;   // Driver program   int     main     ()   {          // finds the time between the system clock      // (present time) and clock's epoch      unsigned     seed     =     chrono  ::  system_clock  ::  now  ().  time_since_epoch  ().  count  ();          // mt19937 is a standard mersenne_twister_engine      mt19937     generator     (  seed  );             // use of operator()       cout      < <     generator  ()      < <     ' is a random number between '  ;          // use of max and min      cout      < <     generator  .  min  ()      < <     ' and '      < <     generator  .  max  ();          return     0  ;   }   

Ausgabe:

3348201622 is a random number between 0 and 4294967295 

3. subtract_with_carry_engine: Es handelt sich um eine Pseudozufallszahlengenerator-Engine, die vorzeichenlose Ganzzahlen erzeugt.
Der verwendete Algorithmus ist verzögert Fibonacci-Generator mit einer Zustandsfolge von r ganzzahligen Elementen plus einem Übertragswert.

    Operator() : Es generiert die Zufallszahl. max : Es gibt den vom Mitgliedsoperator() zurückgegebenen Maximalwert zurück, der (2^w)-1 für subtract_with_carry_engine ist, wobei „w“ die Wortgröße ist. min : Es gibt den vom Mitgliedsoperator() zurückgegebenen Mindestwert zurück, der für subtract_with_carry_engine immer Null ist.
C++
   // C++ program to illustrate the use of    // operator() min and max   // in subtract_with_carry_engine   #include          #include         #include         using     namespace     std  ;   // Driver program   int     main     ()   {          // finds the time between the system clock      // (present time) and clock's epoch      unsigned     seed     =     chrono  ::  system_clock  ::  now  ().  time_since_epoch  ().  count  ();          subtract_with_carry_engine   <  unsigned       24       10       24  >     generator     (  seed  );          // use of operator()      cout      < <     generator  ()      < <     ' is a random number between '  ;          // use of min and max      cout      < <     generator  .  min  ()      < <     ' and '      < <     generator  .  max  ();      return     0  ;   }   

Ausgabe:

8606455 is a random number between 0 and 16777215 


II. Zufallszahlengenerator : Es handelt sich um einen Zufallszahlengenerator, der nichtdeterministische Zufallszahlen erzeugt.

    random_device : Es ist der echte Zufallszahlengenerator. Operator() : Es wird eine neue Zufallszahl zurückgegeben. min : Es gibt den vom Mitgliedsoperator() zurückgegebenen Mindestwert zurück, der für random_device immer Null ist. max : Es gibt den Maximalwert zurück, der vom Mitgliedsoperator() zurückgegeben wird.
C++
   // C++ program to illustrate the use of    // operator() min and max   // in random_device    #include          #include         using     namespace     std  ;   //Driver program   int     main     ()   {      random_device     example  ;          cout      < <     'default random_device characteristics:'      < <     endl  ;          // use of min      cout      < <     'minimum: '      < <     example  .  min  ()      < <     endl  ;          // use of max      cout      < <     'maximum: '      < <     example  .  max  ()      < <     endl  ;          // use of entropy      cout      < <     'entropy: '      < <     example  .  entropy  ()      < <     endl  ;          // use of operator()      cout      < <     'a random number: '      < <     example  ()      < <     endl  ;          return     0  ;   }   

Ausgabe:

default random_device characteristics: minimum: 0 maximum: 4294967295 entropy: 0 a random number: 3705944883 

III. Pseudozufallszahlen-Engines (Instantiierungen) : Dies sind die besonderen Instanziierungen von Generatormotoren und Adaptern:

Pseudozufallszahlen-Engines (Instantiierungen)

1. default_random_engine : Dies ist eine Zufallszahlen-Engine-Klasse, die Pseudozufallszahlen generiert.

    min : Es gibt den durch „operator()“ angegebenen Mindestwert zurück. max : Es gibt den von „operator()“ angegebenen Maximalwert zurück. Operator() : Es wird eine neue Zufallszahl zurückgegeben.
    Die Funktion ändert den internen Zustand um eins, wodurch der Zustandswert gemäß dem angegebenen Algorithmus geändert wird:
 x= (a.x + c)mod m Where x= current state value a and c = respective class template parameters m = class template parameter  
C++
   // C++ program to illustrate the use of    // operator() min and max    // in default_random_engine    #include             #include            #include            using     namespace     std  ;          // Driver program    int     main     ()      {             // finds the time between the system clock       // (present time) and clock's epoch       unsigned     seed     =     chrono  ::  system_clock  ::  now  ().  time_since_epoch  ().  count  ();             // minstd_rand0 is a standard linear_congruential_engine       minstd_rand0     generator     (  seed  );             // generates the random number       cout      < <     generator  ()      < <     ' is a random number between '  ;             // Use of min and max       cout      < <     generator  .  min  ()      < <     ' and '      < <     generator  .  max  ();             return     0  ;      }      

Ausgabe:

201066682 is a random number between 1 and 2147483646 

2. minstd_rand: Es generiert Pseudozufallszahlen; es ist ähnlich linearer Kongruenzgenerator

    Operator(): Es gibt eine neue Zufallszahl zurück. Die Funktion ändert den internen Status um eins, wodurch der Statuswert gemäß dem folgenden Algorithmus geändert wird:
x = (a.x + c) mod m where x= current state value a c and m=class template parameter 
    min: Es gibt den vom Member-Operator() angegebenen Mindestwert zurück. max: Es gibt den vom Mitglied „operator()“ angegebenen Maximalwert zurück, der für linear_congruential_engine (Modulus-1) ist.
C++
   // C++ program to illustrate    // the use of operator() max and min    // in minstd_rand    #include             #include            #include            using     namespace     std  ;          //Driver program    int     main     ()      {             // finds the time between the system clock       //(present time) and clock's epoch       unsigned     seed     =     chrono  ::  system_clock  ::  now  ().  time_since_epoch  ().  count  ();             // minstd_rand0 is a standard       //linear_congruential_engine       minstd_rand0     generator     (  seed  );             // use of operator()       cout      < <     generator  ()      < <     ' is a random number between '  ;             //use of max and min       cout      < <     generator  .  min  ()      < <     ' and '      < <     generator  .  max  ();             return     0  ;      }   

Ausgabe:

489592737 is a random number between 1 and 2147483646 

3.MT19937: Es handelt sich um den Mersenne Twister 19937-Generator. Es handelt sich um einen Pseudozufallsgenerator für 32-Bit-Zahlen mit einer Zustandsgröße von 19937 Bits.

    Operator(): Es generiert eine Zufallszahl. Die Funktion ändert den internen Zustand um eins mithilfe eines Übergangsalgorithmus, der eine Drehung des ausgewählten Elements erzeugt. max: Es gibt den von „operator()“ angegebenen Maximalwert zurück. min: Es gibt den von „operator()“ angegebenen Mindestwert zurück.
     
C++
   // C++ program to illustrate the    // use of operator()min and max    // in mt19937    #include             #include            #include            using     namespace     std  ;          // Driver program    int     main     ()      {             // finds the time between the system clock       //(present time) and clock's epoch       unsigned     seed     =     chrono  ::  system_clock  ::  now  ().  time_since_epoch  ().  count  ();             // mt19937 is a standard       //mersenne_twister_engine       mt19937     generator     (  seed  );             //use of operator()       cout      < <     generator  ()      < <     ' is a random number between '  ;             //use of max and min       cout      < <     generator  .  min  ()      < <     ' and '      < <     generator  .  max  ();             return     0  ;      }   

Ausgabe:

1445431990 is a random number between 0 and 4294967295 

4. ranlux24_base: Es handelt sich um einen Ranlux 24-Basisgenerator. Dabei handelt es sich um einen Subtrahierer mit Übertrags-Pseudozufallsgenerator für 24-Bit-Zahlen, der im Allgemeinen als Basis-Engine für den ranlux24-Generator verwendet wird.

    Operator(): Es gibt eine neue Zufallszahl zurück.
    Die Funktion ändert den internen Zustand, indem sie ihren Übergangsalgorithmus aufruft, der eine Subtraktion mit Übertrag auf das Element anwendet. max: Es gibt den von „operator()“ angegebenen Maximalwert zurück. min: Es gibt den von „operator()“ angegebenen Mindestwert zurück.
C++
   // C++ program to illustrate    // the use of operator()min and max    // in ranlux24_base    #include             #include            #include            using     namespace     std  ;          //Driver program    int     main     ()      {             // finds the time between the system clock       //(present time) and clock's epoch       unsigned     seed     =     chrono  ::  system_clock  ::  now  ().  time_since_epoch  ().  count  ();         subtract_with_carry_engine   <  unsigned    24    10    24  >     generator     (  seed  );             //use of operator()       cout      < <     generator  ()      < <     ' is a random number between '  ;             //use of max and min       cout      < <     generator  .  min  ()      < <     ' and '      < <     generator  .  max  ();             return     0  ;      }      

Ausgabe:

7275352 is a random number between 0 and 16777215 

Ein ähnliches Format gilt für die anderen Beispiele.

IV. Motoradapter

zufälliger Header in C++ | Set 1 (Generatoren)

1. Discard_block_engine: Es handelt sich um eine Engine-Adapter-Klassenvorlage, die a anpasst Pseudozufallszahlengenerator-Engine Geben Sie einen Typ ein, indem Sie nur „r“-Elemente jedes Blocks von „p“-Elementen aus der von ihm erzeugten Sequenz verwenden und den Rest verwerfen.
Der Adapter zählt intern, wie viele Elemente im aktuellen Block erzeugt wurden.

Die Standardgeneratoren ranlux24 Und ranlux48 anpassen a subtract_with_carry_engine mit diesem Adapter.

    Operator(): Es gibt eine neue Zufallszahl zurück. max: Es gibt den von „operator()“ angegebenen Maximalwert zurück. min: Es gibt den von „operator()“ angegebenen Mindestwert zurück.
C++
   // C++ program to illustrate    // the use of operator()min and max    // in the discard_block_engine    #include             #include            #include            using     namespace     std  ;          //Driver program    int     main     ()      {             // finds the time between the system clock       //(present time) and clock's epoch       unsigned     seed     =     chrono  ::  system_clock  ::  now  ().  time_since_epoch  ().  count  ();             // ranlux24 is a standard instantiation       //of discard_block_engine:       ranlux24     generator     (  seed  );             //use of operator()       cout      < <     generator  ()      < <     ' is a random number between '  ;             //use of max and min       cout      < <     generator  .  min  ()      < <     ' and '      < <     generator  .  max  ();             return     0  ;      }      

Ausgabe:

8132325 is a random number between 0 and 16777215 

2. independent_bits_engine: Es handelt sich um eine Engine-Adapter-Klassenvorlage, die a anpasst Pseudozufallszahlengenerator-Engine Typ, um Zufallszahlen mit einer bestimmten Anzahl von Bits (w) zu erzeugen.

    Operator(): Es gibt eine neue Zufallszahl zurück.
    Der Übergangsalgorithmus der Engine ruft den Operator()-Member der Basis-Engine so oft wie nötig auf, um genügend signifikante Bits zum Erstellen eines Zufallswerts zu erhalten. max: Es gibt den von „operator()“ angegebenen Maximalwert zurück. min: Es gibt den von „operator()“ angegebenen Mindestwert zurück.
C++
   // C++ program to illustrate    // the use of operator()min and max    // in independent_bits_engine    #include             #include                // It imports the symbol names in    // std namespace and possibly in Global namespace.    #include            #include            using     namespace     std  ;          //Driver program    int     main     ()      {             // finds the time between the system clock       //(present time) and clock's epoch       unsigned     seed     =     chrono  ::  system_clock  ::  now  ().  time_since_epoch  ().  count  ();             //use of independent_bits_engine       independent_bits_engine   <  mt19937    64    uint_fast64_t  >     generator     (  seed  );             //use of operator()       cout      < <     generator  ()      < <     ' is a random number between '  ;             //use of max and min       cout      < <     generator  .  min  ()      < <     ' and '      < <     generator  .  max  ();             return     0  ;      }      

Ausgabe:

13551674127875514537 is a random number between 0 and 184467 

3. shuffle_order_engine: Es handelt sich um eine Engine-Adapter-Klassenvorlage, die a anpasst Pseudozufallszahlengenerator-Engine Geben Sie so ein, dass die Nummern in einer anderen Reihenfolge geliefert werden.
Das Objekt speichert intern einen Puffer mit k generierten Zahlen und gibt bei Anforderung eine zufällig ausgewählte Zahl im Puffer zurück und ersetzt diese durch einen von seiner Basis-Engine erhaltenen Wert.

    Operator(): Es gibt eine neue Zufallszahl zurück.
    Der Übergangsalgorithmus der Engine wählt einen Wert in der internen Tabelle (der von der Funktion zurückgegeben wird) und ersetzt ihn durch einen neuen Wert, der von der Basis-Engine erhalten wurde. max: Es gibt den von „operator()“ angegebenen Maximalwert zurück. min: Es gibt den von „operator()“ angegebenen Mindestwert zurück.
C++
   // C++ program to illustrate    // the use of operator()min and max    // in shuffle_order_engine    #include             #include            #include            using     namespace     std  ;          int     main     ()      {             // finds the time between the system clock       //(present time) and clock's epoch       unsigned     seed     =     chrono  ::  system_clock  ::  now  ().  time_since_epoch  ().  count  ();             // ranlux24 is a standard instantiation       // of discard_block_engine:       ranlux24     generator     (  seed  );             //use of operator()       cout      < <     generator  ()      < <     ' is a random number between '  ;             //use of max and min       cout      < <     generator  .  min  ()      < <     ' and '      < <     generator  .  max  ();             return     0  ;      }      

Ausgabe:

9213395 is a random number between 0 and 16777215 
Quiz erstellen