Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión

 
Búsqueda Avanzada

15.707 Mensajes en 3.130 Temas- por 371 Usuarios - Último usuario: lasfirrot
Mayo 18, 2012, 05:22:13
Foro de Hispabyte.netProgramaciónCompeticiones de programación y algorítmicaTema: Generación de permutaciones con STL
Páginas: [1]   Ir Abajo
Imprimir
Autor Tema: Generación de permutaciones con STL  (Leído 2435 veces)
0 Usuarios y 1 Visitante están viendo este tema.
neko
Visitante
« : Agosto 01, 2005, 05:18:44 »


Buscando por ahí descubrí recientemente que se puede usar la STL del C++ para generar permutaciones de los contenidos de un vector, lo cual resulta muy útil cuando nos encontremos con problemas que pueden reducirse a la búsqueda de un ciclo hamiltoniano. No obstante con este tipo de problemas hay que ir con bastante cuidado y optimizar lo que se pueda ya que el problema del ciclo hamiltoniano pertenece a la clase de complejidad NP-Completo. Esto a efectos prácticos te dice que hagas lo que hagas el problema genérico no va a librarse de un coste exponencial. De hecho intentar resolver el problema del ciclo hamiltoniano con este método para más de unos 12 ó 13 valores distintos se saldrá casi seguro de los 10 segundos del UVA y ni que decir del segundo de USACO.

Os pongo aquí el código que hice para probar el método:
Código:
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main(int argc, char *argv[]) {

vector<int> v;
vector<int>::iterator start, end, it;

for(int i=1;i<=4;i++) v.push_back(i);

start = v.begin();
end = v.end();

do {
  for(it=v.begin();it!=v.end();it++) cout << *it << " ";
  cout << endl;
} while(next_permutation(start, end));

return 0;
}

Este código genera e imprime las posibles permutaciones de un vector de enteros que contiene los números del 1 al 4. Igual que con enteros, puedes usar cadenas o los objetos que te de la gana si sobrecargas los operadores de comparación adecuadamente. Además, si por ejemplo cambiamos start = v.begin(); por start = ++v.begin();, observaremos que el primer elemento del vector, el 1, queda fijo y se generan las permutaciones variando sólo los demás.

Personalmente no había visto nunca ese #include <algorithm> antes. ¿Conocéis más usos útiles del mismo?

PD: lo probé a usar para un problema del UVA y no dio ningún error de compilación, así que allá está también. Lo que sí me dio es un time limit excedeed (y no me extraña para lo que era).
« Última modificación: Septiembre 04, 2008, 08:33:33 por HQH » En línea
Páginas: [1]   Ir Arriba
Imprimir
Foro de Hispabyte.netProgramaciónCompeticiones de programación y algorítmicaTema: Generación de permutaciones con STL
Ir a:  


Tema diseñado por RJ-45 para Hispabyte.net basado en el
theme famouspadexx v.09 designed by Formado Comprido
Downloable here. My present to padexx.de