Foros del Web » Programación para mayores de 30 ;) » Programación General »

Permutaciones de array

Estas en el tema de Permutaciones de array en el foro de Programación General en Foros del Web. Buenas! Quisiera saber si hay algún método en algún lenguaje de programación que permita obtener las permutaciones de un array, es decir: array = [1, ...
  #1 (permalink)  
Antiguo 13/05/2013, 02:23
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Permutaciones de array

Buenas!

Quisiera saber si hay algún método en algún lenguaje de programación que permita obtener las permutaciones de un array, es decir:

array = [1, 2, 3, 4]

permutaciones:

[1, 2, 3, 4]
[1, 2, 4, 3]
[1, 3, 2, 4]
[1, 3, 4, 2]
...

Gracias!
  #2 (permalink)  
Antiguo 13/05/2013, 02:35
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Permutaciones de array

Existen lenguajes orientados al tratamiento matemático de los datos. El más conocido es Matlab. De echo, ya trae una función "perms(vector)" para hacer lo que necesitas
__________________
Aviso: No se resuelven dudas por MP!

Última edición por Malenko; 13/05/2013 a las 03:15
  #3 (permalink)  
Antiguo 13/05/2013, 03:30
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Respuesta: Permutaciones de array

Supuse que con matlab se podría, pero nunca he tenido ocasión de tocar este lenguaje de programación...

Gracias por la respuesta
  #4 (permalink)  
Antiguo 13/05/2013, 12:43
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Permutaciones de array

Pues supongo que en cualquier lenguaje se puede, por ejemplo en python tienes el método itertools:

Código Python:
Ver original
  1. In [1]: import itertools
  2.  
  3. In [2]: itertools.permutations([1, 2, 3, 4])
  4. Out[2]: <itertools.permutations at 0xa790a7c>
  5.  
  6. In [3]: for i in itertools.permutations([1, 2, 3, 4]):
  7.    ...:     print i
  8.    ...:    
  9. (1, 2, 3, 4)
  10. (1, 2, 4, 3)
  11. (1, 3, 2, 4)
  12. (1, 3, 4, 2)
  13. (1, 4, 2, 3)
  14. (1, 4, 3, 2)
  15. (2, 1, 3, 4)
  16. (2, 1, 4, 3)
  17. (2, 3, 1, 4)
  18. (2, 3, 4, 1)
  19. (2, 4, 1, 3)
  20. (2, 4, 3, 1)
  21. (3, 1, 2, 4)
  22. (3, 1, 4, 2)
  23. (3, 2, 1, 4)
  24. (3, 2, 4, 1)
  25. (3, 4, 1, 2)
  26. (3, 4, 2, 1)
  27. (4, 1, 2, 3)
  28. (4, 1, 3, 2)
  29. (4, 2, 1, 3)
  30. (4, 2, 3, 1)
  31. (4, 3, 1, 2)
  32. (4, 3, 2, 1)

Saludos
__________________
Grupo Telegram Docker en Español
  #5 (permalink)  
Antiguo 14/05/2013, 00:31
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Respuesta: Permutaciones de array

Gracias por responder!

Mientras tuve un rato libre, creé una función que hace las permutaciones de un array numérico...


Código:
funcion permutaciones(minimo){
   long = longitud(minimo);
   con = minimo;
   val = array;
   ret = array;
   c = 0;

   de i=0 hasta long incrementando 1{
      val[i] = minimo.caracter[i];
   }

   de con = minimo hasta 10*long incrementando 1{
      p = verdadero
      
      de i=0 hasta long incrementando 1{
          de j=i+1 hasta long incrementando 1{
              si con.caracter[i] == con.caracter[j] || con.caracter[i].estaEn(val) || con.caracter[j].estaEn(val){
                p = falso
             }
          }
      }

       si(p){
          ret[c++] = con;
       }
   }

   devuelve ret;
}
Quizás no es demasiado rápida u óptima, pero me sirvió para el caso (permutaciones de los valores 1, 2, 3, 4, 5, 6, 7, 8, 9 - para investigar un tema de sudokus, jejeje).

Gracias por contestar, doy el tema por solucionado
  #6 (permalink)  
Antiguo 14/05/2013, 00:40
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Permutaciones de array

Cita:
Iniciado por DoHITB Ver Mensaje
Quizás no es demasiado rápida u óptima, pero me sirvió para el caso (permutaciones de los valores 1, 2, 3, 4, 5, 6, 7, 8, 9 - para investigar un tema de sudokus, jejeje).
Por curiosidad, es para crearlos o para resolverlos? :)
__________________
Aviso: No se resuelven dudas por MP!
  #7 (permalink)  
Antiguo 14/05/2013, 02:45
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Respuesta: Permutaciones de array

Estoy haciendo algunas investigaciones para desarrollar una "pequeña IA" que resuelva los sudokus.

El tema está en que tuve la idea de tratar el sudoku como una matriz matemática (o 9 matrices).

Quería probar a ver si por algún casual encontraba alguna relación, tipo "el determinante del sudoku = X" o "si cada cuadro de 9 es una matriz 3x3 y sumamos los determinantes de las filas obtenemos una relación m:n"...

De momento no he podido sacar nada en claro, pero en ello estoy.

Otro tema que quiero mirar es si cada conjunto de 9 valores (cuadro) tiene un determinante único (por lo que podría ser éste una PK en una base de datos, por ejemplo). De ahí que necesitara las permutaciones...

Un saludo!
  #8 (permalink)  
Antiguo 16/05/2013, 01:22
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Permutaciones de array

Yo hice un sistema para resolver sudokus para una Cybiko. Realmente no es tan complicado ya que para los resolver Sudokus simplemente hay que aplicar unas reglas de reducción en base a las casillas conocidas. Estas reglas se aplican una por una cada vez que se descubre un número hasta descubrir todas. Realmente es mucho más sencillo de lo que parece.
__________________
Aviso: No se resuelven dudas por MP!
  #9 (permalink)  
Antiguo 16/05/2013, 05:17
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Respuesta: Permutaciones de array

Gracias por el consejo.

Ya se que es relativamente fácil (por eso dije "pequeña IA"). Lo que pensé en un principio es hacer comprobaciones básicas por filas, columnas y cuadros (quizás hacerlo con varios hilos).

De esta manera, cada vez que se descubriera un número se volvería a empezar, hasta que no se pudiera avanzar.

El siguiente paso sería hacer una deducción simple, y volver al primer paso (hasta que se pueda).

Finalmente, se haría una "fuerza bruta", en la que asignaría un valor (dentro de los posibles) a un cuadro y seguiría la resolución. En caso de ser erróneo, probaría con otro número (y así hasta solucionarlo).

Pero pensé que podría hacer algo con los determinantes, ya que tienen propiedades tales como mover filas/columnas, etc...

Si gustas te mantengo informado de si encuentro alguna cosa interesante

Un saludo!

Etiquetas: lenguaje, programa
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 05:06.