elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con formula para generar permutaciones
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con formula para generar permutaciones  (Leído 8,107 veces)
Blaster

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Problema con formula para generar permutaciones
« en: 26 Diciembre 2013, 14:34 pm »

Hola a todos

Llevo horas tratando de formular una posible solucion a este enunciado que
encontre por la web, por favor alguien puede darme una idea de como seria la
solucion.
Código
  1. l = longitud de la cadena
  2. l = len(cad);
  3.  
  4. factorial de n n!, o fact(n);
  5. funcion residuo mod o %
  6.  
  7. Una cadena tiene n! permutaciones si su longitud es n
  8. para la permutacion X, X pertenece al intervalo [1, 2, 3, ..., n!]
  9. y para la posicion m-esima en la cadena m pertenece [0,1,2, ..., l-1]
  10. ej. abcd
  11. a: esta en la posicion 0
  12. b: esta en la posicion 1
  13. ...
  14. d: esta en la posicion 3
  15.  
  16. Tenemos un conjunto ordenado o lista ordenada C, en donde estan todos los
  17. caracteres de nuestra cadena, entonces una nueva permutacion para un X dado
  18. seria cad = "";
  19.  
  20. MIENTRAS m varia entre 0 y (longitud cadena -1)
  21. //concatenacion (+)
  22. c = C[ (X mod (n-1)!)/(n-(1+m))! ]
  23. cad = cad + c
  24.  
  25. // Al conjunto le eliminamos el elemento instertado en cad
  26. C = C - {c}
  27. m = m+1
  28. ]
Saludos!


« Última modificación: 26 Diciembre 2013, 14:39 pm por Blaster » En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Problema con formula para generar permutaciones
« Respuesta #1 en: 26 Diciembre 2013, 15:47 pm »

No se entiende nada, tampoco preguntan nada :huh:


En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Problema con formula para generar permutaciones
« Respuesta #2 en: 26 Diciembre 2013, 15:58 pm »

Explica lo que te pide el ejercicio.
Eso ponlo como una cita, no como un code.
En línea

Blaster

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: Problema con formula para generar permutaciones
« Respuesta #3 en: 30 Diciembre 2013, 14:55 pm »

Pasa que esta linea (X mod (n-1)!)/(n-(1+m))! se trata de una
formula, que implementandola de la manera correcta en algun lenguaje; podrias
conseguir con ella todas las permutaciones de un conjunto de elementos. Esto lo saque de un foro donde un usuario lo posteo diciendo que le tomo dos dias encontrar la de escribirla en C, quise contactar con este usuario pero este ya no frecuenta el foro.

Saludos  ;D
« Última modificación: 30 Diciembre 2013, 14:58 pm por Blaster » En línea

dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Re: Problema con formula para generar permutaciones
« Respuesta #4 en: 30 Diciembre 2013, 14:59 pm »

pues eso parece más python...iria mejor en el foro de scripting  :silbar: :silbar:
En línea


ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Problema con formula para generar permutaciones
« Respuesta #5 en: 30 Diciembre 2013, 15:04 pm »

La fórmula de las permutaciones es:
Citar
n!/((n-r)!)
Donde N es el número de elementos, y R el número de elementos cogidos para cada permutación.
Esta fórmula da resultados cuando NO se repiten los elementos, e IMPORTA el orden.
Por si acaso decirte, que en C/C++ no existe la función factorial (!) por si sola. Quizás en la librería Maths encuentres algo, o sinó haces la función a mano.

4! = 4*3*2*1
2! = 2*1
(El 1 se puede omitir, ya que no aporta nada)
1! = 1
0! = 1
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Problema con formula para generar permutaciones
« Respuesta #6 en: 30 Diciembre 2013, 15:36 pm »

La fórmula de las permutaciones es:
Citar
n!/(n-r)!)
.............................

Perdona pero no. Esa es la fórmula de las variaciones sin repetición de n elementos tomados r a r.

La de las permutaciones sin repetición es simplemente

Citar
n!
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Problema con formula para generar permutaciones
« Respuesta #7 en: 30 Diciembre 2013, 16:49 pm »

En un array de 3 elementos {a, b, c}.
Cuantas formas hay de coger elementos de 2 en 2?

a,b / a,c / b,c / b,a / c,a / c,b

(3*2)/(3-2)! = 6
-----------------------------------
De 1 en 1:

a / b / c

(3*2)/(3-1)! = 3

-----------------------------------

De 3 en 3:

a,b,c / a,c,b / b,a,c / b,c,a / c,a,b / c,b,a

(3*2)/(3-3)! = 6

-----------------------------------------------

Además de lo dicho antes, Leosansan, ahí tienes un ejemplo sencillo.

Repito:
Esta fórmula da resultados cuando NO se repiten los elementos, e IMPORTA el orden.
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Problema con formula para generar permutaciones
« Respuesta #8 en: 30 Diciembre 2013, 19:43 pm »


Siento contradecirte, amigo ivancea96 pero tienes un error de concepto básico. Si tienes tres elementos y los vas a tomar de 2 en 2, sin repetir e importando el orden -si no importara serían combinaciones- son variaciones y su fórmula es:

Citar

n!/(n-r)!


Y aplicada al ejemplo que propones es:

Citar

3!/(3-2)!=3!=6


Curioso, justo lo que te sale a tí, como dicen sonó la flauta ¿Dónde está tu error?. Es conceptual, en las permutaciones se tienen n elementos y se tomen n a n.Como ejemplo las permutaciones del conjunto {1,2,3] son:

Citar
123
132
213
231
312
321

En un array de 3 elementos {a, b, c}.
Cuantas formas hay de coger elementos de 2 en 2?


a,b / a,c / b,c / b,a / c,a / c,b

(3*2)/(3-2)! = 6
-----------------------------------


¿Te das cuenta?. No estas tomando los tres elementos por tanto no son permutaciones, sino variaciones y la fórmula que aplicas es la de variaciones.

Resumiendo, y a lo simple:

* permutaciones de n elementos: se toman n a n e importa el orden.

* variaciones de n elementos tomados r a r e importa el orden.

*combinaciones de n elementos tomados r a r y no importa el orden.

Aunque hay mucha información en la red esta  referencia no está mal.

Luego estan con repetición, pero eso no viene al caso ahora mismo.

Espero que este rollito ta aclare las ideas.
;) ;) ;)

;-)  ;-) Felices Navidades y Próspero Año Nuevo.  ;-)  ;-)

¡¡¡¡ Saluditos! ..... !!!!


En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Problema con formula para generar permutaciones
« Respuesta #9 en: 2 Enero 2014, 19:01 pm »

Efectivamente, lo correcto es lo que ha dicho leosansan

De todas formas, el algoritmo para obtener todas las permutaciones de un conjunto de elementos es muy sencillo:
Código:

procedimiento permutaciones(lista_permutaciones, conjunto_datos, numero_datos, elementos_fijados)
{
    vector estatico permutacion(numeros_datos);

    si numero_datos == 0
        lista_permutaciones.añadir(permutacion);
        volver;
    fin si

    para i desde 0 hasta numero_datos
        si i != 0
            intercambiar(conjunto_datos(i),conjunto_datos(0));
        fin si

        permutacion(elementos_fijados) = conjunto_datos(0)

        permutaciones(lista_permutaciones, conjunto_datos(elementos_fijados..numero_datos - 1), numero_datos - 1, elementos_fijados + 1);

        si i != 0
            intercambiar(conjunto_datos(i),conjunto_datos(0));
        fin si
    fin para
}

Donde numero_datos, es el numero de datos que hay en conjunto_datos, y elementos_fijados indica cuantos elementos se han puesto ya en la permutación que se esta calculando.  Una llamada seria por ejemplo:
Código:
permutaciones(lista,{a,b,c},3,0);
Ya que {a,b,c} tiene 3 elementos, y al no haber empezado a ejecutar el algoritmo todavía no se ha fijado ningún elemento.

Si hacemos la traza comprobaremos que efectivamente el algoritmo calcula todas las permutaciones posibles de los elementos a,b y c:
Código:
lista_permutaciones: vacia
conjunto_datos: {a,b,c}
numero_datos = 3
elementos_fijados = 0

numero_datos != 0
|-> i = 0
  |->permutacion(0) =conjunto_datos(0) = a
  |-> permutacinoes(lista_permutaciones,{b,c},3 - 1 , 1)
    |-> 3 - 1 = 2 != 0
      |-> i = 0
      | |->permutacion(1) = conjunto_datos(0) = b
      | |->permutaciones(lista_permutaciones,{c},2 - 1 , 2)
      |   |->2 - 1 = 1 != 0
      |     |-> i = 0
      |     | |->permutacion(2) = conjunto_datos(0) = c
      |     | |->permutaciones(lista_permutaciones,{},1 - 1, 3)
      |     |   |->1-1 == 0
      |     |     |-> lista.añadir(permutacion = {a,b,c})
      |     |     |->volver
      |     |-> i = 1 == numero_elementos ->fin para -> volver
      |-> i = 1
      | |-> 1 != 0
      | |-> intercambiar(conjunto_datos(0) , conjunto_datos(1)) -> conjunto_datos = {c,b}
      | |-> permutacion(1) = conjunto_datos(0) = c
      | |->permutaciones(lista_permutaciones,{b},2 - 1 , 2)
      |   |->2 - 1 = 1 != 0
      |     |-> i = 0
      |     | |->permutacion(2) = conjunto_datos(0) = b
      |     | |->permutaciones(lista_permutaciones,{},2 - 1, 3)
      |     |   |->1-1 == 0
      |     |     |-> lista.añadir(permutacion = {a,c,b})
      |     |     |->volver
      |     |-> i = 1 == numero_elementos ->fin para -> volver
      | |->intercambiar(conjunto_datos(0),conjunto_datos(1)) -> conjunto_datos = {b,c}
      |
      |-> i = 2 == numero_datos -> volver
i = 1 != 0
  |-> intercambiar(conjunto_datos(0),conjunto_datos(1) -> conjunto_datos = {b,a,c}
  |-> permutacion(0) = conjunto_datos(0) = b
  y continuamos...

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con formula de Excel 2003
Dudas Generales
Dannysoft 1 2,593 Último mensaje 16 Agosto 2012, 06:32 am
por jvchino
Problema al generar Código php para subir archivos a mi FTP
PHP
WiseHidden 5 4,369 Último mensaje 24 Septiembre 2012, 22:39 pm
por WiseHidden
Problema gtx650ti y crosshair ii formula (SOLUCIONADO)
Hardware
Root~ 2 2,005 Último mensaje 7 Enero 2013, 22:45 pm
por Aprendiz-Oscuro
fórmula para el tiempo promedio requerido para satisfacer una solicitud.
Dudas Generales
Erix 0 2,782 Último mensaje 27 Abril 2013, 07:25 am
por Erix
problema con formula y aplicación
Java
yony86 7 2,599 Último mensaje 8 Noviembre 2016, 18:34 pm
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines