Arrastrando una matriz mediante la función STL C ++

En este artículo, vamos a ver cómo para mezclar una matriz mediante norma aleatoria función de biblioteca () y random_shuffle () en C ++?

Requisito: Fisher-Yates algoritmo

shuffle ()

shuffle () es una función de la biblioteca estándar que viene bajo el algoritmo archivo de cabecera y ayuda a mezclar el intervalo mencionado de la matriz al azar usando un generador.

Su trabajo interno es exactamente similar al algoritmo Fisher-Yates.

La única cosa añadida es esta función toma una serie de mezclar no toda la matriz. Así, el usuario puede pasar el rango requerido para el shuffle () función. También, excepto usando rand () para crear el índice de intercambio al azar class, utilizamos la función de generador de aquí para seleccionar aleatoriamente el elemento que se ha intercambiado con el elemento final (ITH elemento).

La sintaxis de shuffle () es ,

shuffle(iterator start, iterator end, generator function)

Aquí, iterador de inicio y final define la gama.

C ++ código:

#include <bits/stdc++.h>
using namespace std;
int main()
{
cout << "input array sizen";
int n;
cin >> n;
cout << "Input array elements n";
vector<int> arr(n);
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
//taking the entire range
//iterator start=arr.begin()
//iterator end=arr.end()
//generator function=default_random_engine(0)
shuffle(arr.begin(), arr.end(), default_random_engine(0));
cout << "After reshuffling, printing the arrayn";
for (auto it : arr)
cout << it << " ";
cout << endl;
return 0;
}

salida:

input array size
6
Input array elements
12 43 52 89 5 11
After reshuffling, printing the array
52 12 5 11 43 89

random_shuffling ()

random_shuffling () sirve el mismo propósito.

barajado () se introdujo en C ++ 11, antes sólo había random_shuffling. random_shuffling () por class toma rand () como una función de generador que hace que la aleatoriedad no especificado. Es por eso que barajar se introdujo en la versión posterior, donde las ejerce funciones de generador mejor que rand () . Sin embargo, por la sobrecarga que puede traer el mismo rendimiento como arrastrando los pies a través random_shuffling () demasiado pasando función de generador definida por el usuario. A continuación se muestra el ejemplo de random_shuffling () .

El random_shuffling for sintaxis es la misma exactamente como arrastrando los pies (),

1) sin ninguna función de generador, rand () por default

#include <bits/stdc++.h>
using namespace std;
int main()
{
cout << "input array sizen";
int n;
cin >> n;
cout << "Input array elements n";
vector<int> arr(n);
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
//taking the entire range
//iterator start=arr.begin()
//iterator end=arr.end()
//generator function=rand() by default
random_shuffle(arr.begin(), arr.end());
cout << "After reshuffling, printing the arrayn";
for (auto it : arr)
cout << it << " ";
cout << endl;
return 0;
}

salida:

input array size
6
Input array elements
56 32 45 82 98 13
After reshuffling, printing the array
98 82 32 45 56 13

2) definido por el usuario generador de

#include <bits/stdc++.h>
using namespace std;
int myrandom(int i)
{
return rand() % i;
}
int main()
{
cout << "input array sizen";
int n;
cin >> n;
cout << "Input array elements n";
vector<int> arr(n);
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
//taking the entire range
//iterator start=arr.begin()
//iterator end=arr.end()
//generator function=rand() by default
random_shuffle(arr.begin(), arr.end(), myrandom);
cout << "After reshuffling, printing the arrayn";
for (auto it : arr)
cout << it << " ";
cout << endl;
return 0;
}

salida:

input array size
6
Input array elements
32 67 3 8 12 6
After reshuffling, printing the array
12 8 67 3 32 6

En una sola nota, barajar es mejor que random_shuffling ya que se puede utilizar las funciones del generador.


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *