Comunidad de diseño web y desarrollo en internet online

mejorar el codigo

Citar            
MensajeEscrito el 16 May 2010 07:32 pm
buenas a todos...como andan???

estaba haciendo un pequeño algoritmo, para que me liste todos los caminos posibles que exista.

Es decir, suponiendo que hay 3 caminos: A, B y C, los caminos posibles serian:

A B C
A C B
B A C
B C A
C A B
C B A

es decir 3! (3 factorial)....
cuestion que hice el codigo, pero me gustaria que fuese mas reusable, porque para el caso de que sean 4, 5 o 10 caminos, se torna engorroso crear tanto los for como la condicion....por lo que me gustaria me ayudaran a mejorar el siguiente codigo:

Código ActionScript :

var colectivos:Array=new Array("A", "B", "C");
var combinaciones:Array=new Array ();
for (var i:int=0; i<colectivos.length; i++)
{
   for(var j:int=0; j<colectivos.length; j++)
   {
      for(var k:int=0; k<colectivos.length; k++)
      {
         if ((colectivos[i]!=colectivos[j]) && (colectivos[i]!=colectivos[k])&& (colectivos[j]!=colectivos[k]))
         {
            trace(colectivos[i]+" "+colectivos[j]+" "+colectivos[k]);
         }
      }
   }
}



desde ya gracias.

saludos

Por bubudrc

Claber

591 de clabLevel

1 tutorial

 

mayo 2006

chrome
Citar            
MensajeEscrito el 17 May 2010 09:17 am
No me he podido resistir. No sé si será el mejor modo posible.
La idea que he sacado aquí, es usar "números factorádicos". Vale, igual que tenemos la base 10 (los números de toda la vida), tenemos los números en base 2 (los binarios)... También existen numeraciones en distintas bases.
La idea de un número factorádico es que
0=0
1=10
2=100
3=110
4=200
5=210
...
Vamos un dígito es siempre mayor que el dígito que tienes a tu derecha.
Luego, la relación con las permutaciones es como indica la Wikipedia sobre factorádicos

Puff, esta función, dado un array, devuelve en otro array la combinación de ellas

Código ActionScript :

private function findPermutaciones(array:Array):Array {
   var permutaciones:Array = new Array();
   var i:int = 0;

   while (true){
                //Hallamos el "factoradico"
      var factor:Array = new Array();
      var k:int = i
      for (var j:int= 1; j <= array.length; ++j)
      {
         factor[array.length-j]=(k % j);
         k /= j;
      }
      if (k >= 1) {
         break;
      }
               //Con ese "factoradico" hallamos la permutación
      var texto:String = "";
      var arrayCopy:Array = array.join("|").split("|"); //Hacemos una copia del array
      for (j = 0; j < factor.length; j++) {
         texto += arrayCopy.splice(factor[j], 1)[0];
      }
      permutaciones.push(texto);
      i++
   }
   return permutaciones;
}

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 17 May 2010 02:22 pm
guau...simplemente espectacular....

La verdad que conozco la base de numeracion (decimal, hexa, binaria...), pero nunca habia escuchado sobre los factorádicos...simplemente espectacular, al igual q tu respuesta.

Siempre contestando esas pregutas de forma excelente y encima haciendo que todo funcione.

Te agradezco tu ayuda y seguire investigando un poco mas sobre el tema, para poder mejorar las siguientes busquedas que debo realizar.

Saludos

Por bubudrc

Claber

591 de clabLevel

1 tutorial

 

mayo 2006

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.