Foros del Web » Programación para mayores de 30 ;) » C/C++ »

generar permutaciones aleatorias

Estas en el tema de generar permutaciones aleatorias en el foro de C/C++ en Foros del Web. Hola, tengo que hacer un programa que me genere 10000000 permutaciones aleatorias de los 6 primeros numeros naturales y que imprima cuantas de ellas estan ...
  #1 (permalink)  
Antiguo 21/02/2007, 06:53
 
Fecha de Ingreso: febrero-2007
Mensajes: 79
Antigüedad: 17 años, 9 meses
Puntos: 0
generar permutaciones aleatorias

Hola, tengo que hacer un programa que me genere 10000000 permutaciones aleatorias de los 6 primeros numeros naturales y que imprima cuantas de ellas estan ordenadas:

Lo he implementado así, tengo qutilizar random_shuffle:

#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>

using namespace std;


void permutaciones (vector<int>& v)
{

const size_t n = sizeof v / sizeof *v;
random_shuffle(v, v + n);
int cont;
if (prueba_ordena(v))
cont++;

}
bool prueba_ordena(const vector<int>& v)
{
int i=0;
for(int k=1; k< v.size(); ++k){
if(v[k]<v)
return false;
i=k;
}
return true;
}
int main()
{
vector<int>v(6);
for(int i=0; i<6; ++i)
v[i]=i;
for (long i=0; i<10000000; ++i)
permutaciones(v);
}

Pero me da error en las lineas de random_shuffle, será que no lo ultilizo bien?? si alguien me ayuda...
Gracias de antemano.
  #2 (permalink)  
Antiguo 22/02/2007, 09:29
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 18 años, 5 meses
Puntos: 28
Re: generar permutaciones aleatorias

¿Dices que el error te da aqui?
Código:
const size_t n = sizeof v / sizeof *v;
random_shuffle(v, v + n);
Pues si, el error es que el primer parametro de la funcion "random_shuffle" no puede ser v y por consiguiente el segundo no puede ser v+n, tiene que ser algo asi:
Código:
random_shuffle(v.begin(), v.begin() + n);
Otro error que tienes es el siguiente:
Cita:
const size_t n = sizeof v / sizeof *v;
Si lo que quieres es la cantidad de elementos la puedes obtener con el metodo "size()" del "vector"
Código:
size_t n = v.size();
random_shuffle(v.begin(), v.end());
Si te fijas no puse begin()+n porque el puntero al ultimo elemento lo obtienes directamente con el metodo "end()" de la platilla vector.

Te recomiendo que te consigas un buen manual de la STL para que te alcare un poco mas las dudas y aproveches toda su potencia.

Por cierto, no probe el resto del codigo, corrige lo que te mencione y despues nos comentas que tal te fue.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:41.