logo

cabeçalho aleatório em C++ | Conjunto 1 (Geradores)

Este cabeçalho apresenta recursos de geração de números aleatórios. Esta biblioteca permite produzir números aleatórios usando combinações de geradores e distribuições.

    Geradores: Objetos que geram números uniformemente distribuídos.
  • Distribuições : Objetos que transformam sequências de números geradas por um gerador em sequências de números que seguem uma distribuição de variável aleatória específica, como Normal ou Binomial uniforme.

Geradores

I. Mecanismos de números pseudo-aleatórios: Eles usam um algoritmo para gerar números aleatórios com base em uma semente inicial. Estes são:



motores de números aleatórios' title=

1. motor_linear_congruencial : é o mecanismo mais simples da biblioteca STL que gera números inteiros aleatórios sem sinal. Segue: 

chave de inserção do laptop
 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 
    operador():Ele gera um número aleatório.min:Fornece o valor mínimo retornado pelo membro operador().máximo:Fornece o valor máximo retornado pelo membro operador().
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; } 

Saída:

211182246 is a random number between 1 and 2147483646

2. mersenne_twister_engine: É um mecanismo de números aleatórios baseado no algoritmo Mersenne Twister. Ele produz números aleatórios inteiros sem sinal de alta qualidade no intervalo [0 (2 ^ w) -1].
onde 'w' é o tamanho da palavra: Número de bits de cada palavra na sequência de estado. 

    operador():Ele gera o número aleatório.min:Ele retorna o valor mínimo retornado pelo membro operador() que para mersenne_twister_engine é sempre zero.máximo:Ele retorna o valor máximo retornado pelo membro operator() que para mersenne_twister_engine é 2w-1 (onde w é o tamanho da palavra).
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; } 

Saída:

3348201622 is a random number between 0 and 4294967295

3. subtrair_com_carry_engine: É um mecanismo gerador de números pseudo-aleatórios que produz números inteiros sem sinal.
O algoritmo usado é um defasado gerador de fibonacci com uma sequência de estados de r elementos inteiros mais um valor de transporte.

    operador(): Gera o número aleatório.máx.: retorna o valor máximo retornado pelo membro operator() que é (2^w)-1 para subtract_with_carry_engine onde 'w' é o tamanho da palavra.min: retorna o valor mínimo retornado pelo membro operador() que é sempre zero para subtract_with_carry_engine.
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; } 

Saída:

8606455 is a random number between 0 and 16777215


II. Gerador de números aleatórios : É um gerador de números aleatórios que produz números aleatórios não determinísticos.

histórico de versões do Android
    dispositivo_aleatório: É o verdadeiro gerador de números aleatórios.operador(): retorna um novo número aleatório.min: retorna o valor mínimo retornado pelo membro operador() que para random_device é sempre zero.máx.: retorna o valor máximo retornado pelo membro operador().
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; } 

Saída:

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

III. Mecanismos de números pseudo-aleatórios (instanciações) : Estas são as instanciações específicas de motores geradores e adaptadores:

Mecanismos de números pseudo-aleatórios (instanciações)' title=

1.default_random_engine : esta é uma classe de mecanismo de números aleatórios que gera números pseudo-aleatórios.

    min: retorna o valor mínimo fornecido pelo operador().máx.: retorna o valor máximo dado pelo operador().operador(): retorna um novo número aleatório.
    A função altera o estado interno por um que modifica o valor do estado de acordo com o algoritmo fornecido:
 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;  }  

Saída:

201066682 is a random number between 1 and 2147483646

2.minstd_rand: Gera números pseudoaleatórios; é semelhante a gerador congruente linear

    operador():Ele retorna um novo número aleatório. A função altera o estado interno por um que modifica o valor do estado de acordo com o seguinte algoritmo:
x = (a.x + c) mod m where x= current state value a c and m=class template parameter
    min:Ele retorna o valor mínimo fornecido pelo membro operador().máximo:Ele retorna o valor máximo fornecido pelo membro operador() que para linear_congruential_engine é (módulo-1).
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;  } 

Saída:

489592737 is a random number between 1 and 2147483646

3.MT19937: É o gerador Mersenne Twister 19937. É um gerador pseudo-aleatório de números de 32 bits com um tamanho de estado de 19.937 bits.

tamanho do vetor c++
    operador():Ele gera um número aleatório. A função altera o estado interno em um usando um algoritmo de transição que produz uma torção no elemento selecionado.máximo:Retorna o valor máximo fornecido pelo operador().min:Retorna o valor mínimo fornecido pelo operador().
     
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;  } 

Saída:

1445431990 is a random number between 0 and 4294967295

4. ranlux24_base: É um gerador de base Ranlux 24. É um gerador pseudo-aleatório de subtração com transporte de números de 24 bits, geralmente usado como mecanismo base para o gerador ranlux24.

    operador():Ele retorna um novo número aleatório.
    A função altera o estado interno chamando seu algoritmo de transição que aplica uma operação de subtração com transporte no elemento.máximo:Retorna o valor máximo fornecido pelo operador().min:Retorna o valor mínimo fornecido pelo operador().
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<unsigned241024> 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;  }  

Saída:

7275352 is a random number between 0 and 16777215

Formato semelhante é aplicável aos outros exemplos.

4. Adaptadores de motor

cabeçalho aleatório em C++ | Conjunto 1 (Geradores)

1. descarte_block_engine: É um modelo de classe de adaptador de mecanismo que adapta um Motor gerador de números pseudo-aleatórios digite usando apenas elementos 'r' de cada bloco de elementos 'p' da sequência que produz descartando o resto.
O adaptador mantém uma contagem interna de quantos elementos foram produzidos no bloco atual.

Os geradores padrão ranlux24 e ranlux48 adaptar um subtrair_com_carry_engine usando este adaptador.

    operador():Ele retorna um novo número aleatório.máximo:Retorna o valor máximo fornecido pelo operador().min:Retorna o valor mínimo fornecido pelo operador().
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;  }  

Saída:

conversão de int para string
8132325 is a random number between 0 and 16777215

2. motor_bits_independente: É um modelo de classe de adaptador de mecanismo que adapta um Motor gerador de números pseudo-aleatórios digite para produzir números aleatórios com um número específico de bits (w).

    operador():Ele retorna um novo número aleatório.
    O algoritmo de transição do mecanismo invoca o membro operador() dos mecanismos base quantas vezes forem necessárias para obter bits significativos suficientes para construir um valor aleatório.máximo:Retorna o valor máximo fornecido pelo operador().min:Retorna o valor mínimo fornecido pelo operador().
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<mt1993764uint_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;  }  

Saída:

13551674127875514537 is a random number between 0 and 184467

3. shuffle_order_engine: É um modelo de classe de adaptador de mecanismo que adapta um Motor gerador de números pseudo-aleatórios digite para que os números sejam entregues em uma sequência diferente.
O objeto mantém internamente um buffer de k números gerados e quando solicitado retorna um número selecionado aleatoriamente dentro do buffer substituindo-o por um valor obtido de seu mecanismo base.

    operador():Ele retorna um novo número aleatório.
    O algoritmo de transição do mecanismo escolhe um valor na tabela interna (que é retornado pela função) e o substitui por um novo valor obtido de seu mecanismo base.máximo:Retorna o valor máximo fornecido pelo operador().min:Retorna o valor mínimo fornecido pelo operador().
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;  }  

Saída:

9213395 is a random number between 0 and 16777215
Criar questionário