Aleatorio() vs random_shuffle() en C++

Aleatorio Vs Random Shuffle En C



En C++, la biblioteca estándar proporciona dos funciones, barajar() y random_shuffle() que se utilizan para reorganizar los elementos de un contenedor. Aunque ambas funciones tienen el mismo propósito, difieren en su implementación y en la forma en que generan números aleatorios.

A partir de este artículo, encontrará las diferencias entre estas dos funciones y comprenderá cómo funcionan.

barajar() en C++

El barajar() La función es una función C++ incorporada que se utiliza para mezclar o reorganizar aleatoriamente los elementos en un rango determinado. La función se declara en el archivo de encabezado y tiene dos argumentos: la posición inicial del rango es el primer argumento y el segundo argumento representa la posición final.







Además, también toma un tercer parámetro opcional, que es un objeto de función que genera números aleatorios que se usarán para mezclar los elementos en el rango.



Cuando el barajar() se llama a la función, reordena aleatoriamente los elementos en el rango especificado utilizando el generador de números aleatorios provisto. El resultado de la mezcla no es predecible, y cada permutación posible de los elementos tiene la misma probabilidad de ocurrir.



Ejemplo

Considere el siguiente ejemplo del uso de la función aleatoria() en C++. En este programa hemos creado el vector una cosa con los valores enteros de 0 a 10. Luego generamos un generador de números aleatorios, que luego se pasa junto con el rango del vector al barajar() función. El barajar() La función toma el número e intercambia los elementos en función de este número. Luego imprimimos la secuencia de vectores reorganizada usando el ciclo for





#incluir

#incluir

#incluye

#incluir

#incluir

usando el espacio de nombres estándar ;

En t principal ( )

{

vector < En t > una cosa { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;

  no firmado semilla = crono :: reloj del sistema :: ahora ( ) . tiempo_desde_la_época ( ) . contar ( ) ;

barajar ( una cosa. comenzar ( ) , una cosa. fin ( ) , default_random_engine ( semilla ) ) ;

cout << 'los elementos barajados son:' ;

  para ( En t & i : una cosa )

cout << ' ' << i ;

cout << final ;

  devolver 0 ;

}

random_shuffle() en C++

El random_shuffle() La función también reorganiza aleatoriamente los elementos en el rango dado con algún número elegido al azar. Utiliza un generador de números aleatorios para generar una secuencia de números aleatorios y luego usa esos números para mezclar los elementos en el rango, por lo que la secuencia del programa será diferente cada vez que ejecute el programa.



Se requieren dos parámetros para random_shuffle() : la posición inicial del rango es el primer parámetro y el segundo parámetro es la posición final. Además, random_shuffle() puede tomar un tercer parámetro opcional, que es un objeto de función que se puede usar para generar los números aleatorios para mezclar los elementos.

Ejemplo

El siguiente ejemplo ilustra el funcionamiento del random_shuffle() en C++. En este código, hemos creado un cosa vectorial con valores enteros del 1 al 10 y luego usó el en bucle para imprimir la secuencia mezclada aleatoriamente:

#incluir

#incluye

usando el espacio de nombres estándar ;

En t principal ( )

{

vector < En t > una cosa { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;

  srand ( transmisión estática < no firmado En t > ( tiempo ( punto nulo ) ) ) ;

random_shuffle ( una cosa. comenzar ( ) , una cosa. fin ( ) ) ;

  para ( En t i : una cosa ) {

cout << i << ' ' ;

  }

cout << ' \norte ' ;

   

  devolver 0 ;

}

Diferencia entre barajar() y aleatorio_shuffle()

Estas son las diferencias clave entre barajar() y random_shuffle() funciones en C++.

1: random_shuffle() toma un par de iteradores que representan el rango de elementos a barajar, mientras que barajar() toma un par de iteradores que representan el rango de elementos para barajar, así como un generador de números aleatorios para usar para barajar.

2: random_shuffle() es generalmente menos eficiente que barajar() , ya que tiene que generar una secuencia de números aleatorios para usar para barajar.

3: random_shuffle() utiliza la implementación interna de la biblioteca estándar de C++ del generador de números aleatorios para mezclar los elementos, mientras que barajar() le permite especificar su propio generador de números aleatorios para usar en la reproducción aleatoria, brindándole más control sobre la aleatoriedad de la reproducción aleatoria.

4: random_shuffle() se introdujo en C++98 y es compatible con todas las versiones de la biblioteca estándar de C++, mientras que barajar() se introdujo en C++ 11 y solo lo admiten los compiladores que implementan esa versión del estándar.

Pensamientos finales

La elección entre barajar() y random_shuffle() depende de su caso de uso y requisitos específicos. Si necesita más control sobre la aleatoriedad de la mezcla, o si desea utilizar un generador de números aleatorios personalizado, entonces barajar() sería una mejor opción. Por otro lado, si no necesita ese nivel de control y solo quiere una forma simple de mezclar elementos, entonces random_shuffle() podría ser suficiente.