• Domingo 5 de Mayo de 2024, 02:17

Autor Tema:  Re: 12/02/03 - Bajo/Medio - Vectores - Permutaciones  (Leído 1980 veces)

gothmog

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
Re: 12/02/03 - Bajo/Medio - Vectores - Permutaciones
« en: Miércoles 12 de Febrero de 2003, 15:28 »
0
Teniendo un vector unidimensional de n elementos, los cuales queremos permutar aleatoriamente (uso de random).

Ejemplo:

V=[1,2,3,4,5,6] ---> V'=[4,2,3,1,6,5]

Si os parece muy facil, podriamos extenderlo a una matriz de MxN dimensiones, que aunque es mas de lo mismo, creo que plantea mayor dificultad:)

adocrates

  • Miembro activo
  • **
  • Mensajes: 54
    • Ver Perfil
Re: 12/02/03 - Bajo/Medio - Vectores - Permutaciones
« Respuesta #1 en: Lunes 24 de Febrero de 2003, 21:32 »
0
Vamos, y cual es la complejidad ? B)
Solo C que nada C.

gothmog

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
Re: 12/02/03 - Bajo/Medio - Vectores - Permutaciones
« Respuesta #2 en: Martes 25 de Febrero de 2003, 19:53 »
0
Citar
Originalmente publicado por adocrates
Vamos, y cual es la complejidad ? B)


???

Si es un vector es baja/media, quiza media. Lo de la matriz lo digo por si os parece mu facil, q no se q nivel tendreis.

O te refieres a la complejidad algoritmica?

gothmog

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
12/02/03 - Bajo/Medio - Vectores - Permutaciones
« Respuesta #3 en: Domingo 16 de Marzo de 2003, 22:00 »
0
Bueno, 1 mes despues os traigo la respuesta (si es que alguien la lee y le interesa, pq este foro esta poco mas que muerto:()

void permuta(int B[], int N){  // N = longitud del vector.
  int x,i,j, cota;
  int *Aux = new int[N];         // Vector auxiliar

  srand(time(NULL));           // Valor semilla para rand() Requiere el archivo time.h

  for(i=0; i<N; i++){          // Copia el vector B en Aux
        Aux = B;
  }

  for (i=0; i<N-1; i++){
    x = rand()%(N-i);
    cota = (N-1)-i-x;
    B = Aux
  • ;

    for (j=0; j<cota; j++){
      Aux
  • = Aux[x+1];

      x++;
    }
  }
  B[N-1] = Aux[0];
  delete []Aux;
}


Y un codigo de ejemplo para probarlo:

#pragma hdrstop
#include <iostream.h>
#include <conio.h>
#include <time.h>

#pragma argsused
int main(int argc, char* argv[])
{
        int c;
        const n=1000;
        int *array = new int[n];

        for(c=0; c<n; c++){
                array[c] = c+1;
                cout << array[c] << " ";
        }
        cout << endl;

        permuta(array,n);

        for(c=0; c<n; c++){
                cout << array[c] << " ";
        }
        cout << endl;

        while (!kbhit());
        delete []array;
        return 0;
}