Shuffle () vs random_shuffle () em C++

Shuffle Vs Random Shuffle Em C



Em C++, a biblioteca padrão fornece duas funções, embaralhar() e random_shuffle() que são usados ​​para reorganizar os elementos de um contêiner. Embora ambas as funções tenham o mesmo propósito, elas diferem em sua implementação e na forma como geram números aleatórios.

A partir deste artigo, você encontrará as diferenças entre essas duas funções e entenderá como elas funcionam.

shuffle() em C++

O embaralhar() function é uma função C++ integrada usada para embaralhar ou reorganizar aleatoriamente os elementos em um determinado intervalo. A função é declarada no header e tem dois argumentos: a posição inicial do intervalo é o primeiro argumento e o segundo argumento representa a posição final.







Além disso, também leva um terceiro parâmetro opcional, que é um objeto de função que gera números aleatórios a serem usados ​​para embaralhar os elementos no intervalo.



Quando o embaralhar() função é chamada, ela reordena aleatoriamente os elementos no intervalo especificado usando o gerador de números aleatórios fornecido. O resultado do embaralhamento não é previsível, e cada possível permutação dos elementos tem a mesma probabilidade de ocorrer.



Exemplo

Considere o exemplo abaixo de uso do função shuffle() em C++. Neste programa, criamos o vetor uma coisa com os valores inteiros de 0 a 10. Em seguida, geramos um gerador de números aleatórios, que é passado junto com o intervalo do vetor para o embaralhar() função. O embaralhar() A função pega o número e troca os elementos com base nesse número. Em seguida, imprimimos a sequência vetorial reorganizada usando o loop for





#include

#include

#include

#include

#include

usando namespace std ;

int principal ( )

{

vetor < int > uma coisa { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;

não assinado semente = crono :: system_clock :: agora ( ) . tempo_desde_época ( ) . contar ( ) ;

embaralhar ( uma coisa. começar ( ) , uma coisa. fim ( ) , default_random_engine ( semente ) ) ;

cout << 'elementos embaralhados são:' ;

para ( int & eu : uma coisa )

cout << '' << eu ;

cout << fim ;

retornar 0 ;

}

random_shuffle() em C++

O random_shuffle() A função também reorganiza aleatoriamente os elementos no intervalo fornecido com algum número escolhido aleatoriamente. Ele usa um gerador de números aleatórios para gerar uma sequência de números aleatórios e, em seguida, usa esses números para embaralhar os elementos no intervalo, para que a sequência do programa seja diferente toda vez que você executar o programa.



Dois parâmetros são necessários para random_shuffle() : a posição inicial do intervalo é o primeiro parâmetro e o segundo parâmetro é a posição final. Adicionalmente, random_shuffle() pode receber um terceiro parâmetro opcional, que é um objeto de função que pode ser usado para gerar os números aleatórios para embaralhar os elementos.

Exemplo

O exemplo abaixo ilustra o funcionamento do random_shuffle() em C++. Neste código, criamos um coisa de vetor com valores inteiros de 1 a 10 e, em seguida, usou o para loop para imprimir a sequência embaralhada aleatoriamente:

#include

#include

usando namespace std ;

int principal ( )

{

vetor < int > uma coisa { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;

srand ( static_cast < não assinado int > ( tempo ( nullptr ) ) ) ;

random_shuffle ( uma coisa. começar ( ) , uma coisa. fim ( ) ) ;

para ( int eu : uma coisa ) {

cout << eu << ' ' ;

}

cout << ' \n ' ;



retornar 0 ;

}

Diferença entre shuffle() e random_shuffle()

Aqui estão as principais diferenças entre embaralhar() e random_shuffle() funções em C++.

1: random_shuffle() leva um par de iteradores representando o intervalo de elementos para embaralhar, enquanto embaralhar() leva um par de iteradores representando o intervalo de elementos para embaralhar, bem como um gerador de números aleatórios para usar para embaralhar.

2: random_shuffle() geralmente é menos eficiente do que embaralhar() , pois precisa gerar uma sequência de números aleatórios para usar no embaralhamento.

3: random_shuffle() usa a implementação interna da biblioteca padrão C++ do gerador de números aleatórios para embaralhar os elementos, enquanto embaralhar() permite que você especifique seu próprio gerador de números aleatórios para usar para embaralhar, dando a você mais controle sobre a aleatoriedade do embaralhamento.

4: random_shuffle() foi introduzido em C++98 e é suportado por todas as versões da C++ Standard Library, enquanto embaralhar() foi introduzido em C++11 e é suportado apenas por compiladores que implementam essa versão do padrão.

Pensamentos finais

A escolha entre embaralhar() e random_shuffle() depende do seu caso de uso e requisitos específicos. Se você precisar de mais controle sobre a aleatoriedade do embaralhamento ou se quiser usar um gerador de números aleatórios personalizado, então embaralhar() seria uma escolha melhor. Por outro lado, se você não precisa desse nível de controle e deseja apenas uma maneira simples de embaralhar os elementos, então random_shuffle() poderia ser suficiente.