¿Cómo puedo aleatorizar la matriz almacenada y luego usarla como entrada?

Suponiendo por las etiquetas que quiere decir en C:

  / **
  * Destructivamente lee un elemento aleatorio de A.
  * *
  * Esta función modifica A irreversiblemente.
  * *
  * @param A La matriz para leer.
  * @param stayPtr Un puntero a una variable que contiene el resto
  * número de elementos en A.
  * @return Un elemento aleatorio de A del rango [0, * restoPtr)
  * /
 int readNextElement (int * A, ssize_t * restantesPtr) {
   afirmar (* restoPtr> 0);

   // Usa tu enfoque favorito para generar un número entero 
   // en el rango [0, * restoPtr) como arc4random_uniform ().
   int index = floor (drand48 () * (* restantesPtr));

   valor int = A [índice];
   A [índice] = A [- (* ​​restoPtr)];  // ***

   valor de retorno;
 }

 ...

 int Val [] = {1,2,3,4,5};
 ssize_t restante = sizeof (Val) / sizeof (Val [0]);

 while (restante> 0) {
   int nextVal = readNextElement (Val, y restante);
   ...
 }

Un poco menos de contabilidad que una mezcla aleatoria de Fisher-Yates [1], pero hace el trabajo si está tratando de crear una secuencia de valores de entrada. La asignación en la línea marcada *** se puede reemplazar con una operación de intercambio para preservar los valores (pero no el orden) de A.

Notas al pie

[1] Fisher – Yates baraja – Wikipedia

  función aleatoria (matriz) {
   var currentIndex = array.length, temporaryValue, randomIndex;

   // Si bien quedan elementos para mezclar ...
   while (0! == currentIndex) {

     // Elige un elemento restante ...
     randomIndex = Math.floor (Math.random () * currentIndex);
     currentIndex - = 1;

     // Y cambiarlo por el elemento actual.
     temporaryValue = array [currentIndex];
     array [currentIndex] = array [randomIndex];
     array [randomIndex] = temporaryValue;
   }

   matriz de retorno;
 }

 // Usado así
 var arr = [2, 11, 37, 42];
 arr = barajar (arr);
 console.log (arr);

C ++:

  std :: array  arr {1,2,3,4,5};
   auto prng = std :: default_random_engine (semilla);
   std :: shuffle (arr.begin (), arr.end (), prng);

barajar – Referencia de C ++

More Interesting

¿Qué debo aprender a continuación para mejorar mi última capa?

Cómo crear un algoritmo

¿Cuáles son los rompecabezas de algoritmos de notación O más interesantes?

Supongamos que tenemos una matriz 8 * 8. Cada celda tiene 0 o 1. Se le dará una ubicación y deberá encontrar todas las que se encuentran en la misma isla. ¿Los puntos se encuentran en la misma isla si un punto está en alguna de las celdas adyacentes?

¿Cuándo se debe comenzar a resolver los problemas del Proyecto Euler en HackerRank? He resuelto alrededor de 50 en SPOJ, entonces, ¿es el momento adecuado para comenzar?

Cómo realizar una operación de revolución usando un treap

¿Por qué la mayoría de las personas en el campo de la complejidad provienen de entornos físicos?

¿Se puede implementar un mapa usando Tree? ¿Se puede implementar un mapa usando List? Esto es específico de Java, pero me gustaría conocer el enfoque general.

¿Cuál es el algoritmo más difícil que has implementado? ¿Por qué fue difícil? ¿Cuánto tiempo te llevó?

¿Las empresas comerciales de algo funcionan mejor que las empresas comerciales que no son algo?

Dada una matriz con 1s y 0s, necesitamos crear una matriz tal que a [i] [j] = 1, si solo cada elemento en la fila i y columna j es 1, de lo contrario 0. Tenemos que usar un espacio constante y tener Una óptima complejidad temporal. ¿Cuáles son algunas posibles soluciones?

¿Cómo se puede averiguar el número de veces que se repite una palabra en una cadena usando Java?

¿Es posible resolver un problema de cambio de monedas para algunos elementos cíclicos a través de la programación dinámica si no se permite el uso de monedas adyacentes?

¿Cuál es la relación entre las cadenas de Markov y los procesos de Poisson?

¿Qué tan bien funciona el algoritmo NativeTrack de AppsFlyer?