SoloCodigo

Programación Específica => Diseño de Algoritmos => Mensaje iniciado por: vimaci en Miércoles 2 de Agosto de 2006, 19:57

Título: Combinacion De Elementos De Una Lista
Publicado por: vimaci en Miércoles 2 de Agosto de 2006, 19:57
Tengo una lista con, por ejemplo, los siguientes elementos: A, B, C, D, E y tengo que escribir todas las combinaciones posibles de N elementos (siendo N un parametro que me dan en la llamada del programa)
por ejemplo, para N=2 las combinaciones serían

A, B, C, D, E, AA, AB, AC, AD, AE, BA, BB, BC, BD, BE, CA, CB, CC, CD, CE, DA, DB, DC, DD, DE, EA, EB, EC, ED, EE

tengo que hacer una funcioncilla que me haga esto, y no se como hacerlo, agradezco cualquier sugerencia
Título: Re: Combinacion De Elementos De Una Lista
Publicado por: Enko en Jueves 3 de Agosto de 2006, 16:47
Trasladé a Diseño de Algoritmos, seguramente tendrás mas suerte aqui :rolleyes:
Título: Re: Combinacion De Elementos De Una Lista
Publicado por: fuhrer en Jueves 3 de Agosto de 2006, 18:36
Hola, que tal.

Eso es fácil, lo único que tienes que hacer es tomar tu primer caracter, luego el segundo, después el tercero y así sucesivamente hasta que completes los N carateres. Esto lo deberas hacer recursivamente para que cuando regrese tu función, tomes el siguiente caracter.

Espero que me hayas entendido como.

Hasta luego.
Título: Re: Combinacion De Elementos De Una Lista
Publicado por: vimaci en Viernes 4 de Agosto de 2006, 16:04
Se que lo tengo que hacer recursivamente, pero estoy muuuuuuuuuuy pez en recursividad y no sé como hacerlo...

no encuentro por ahí nada parecido que me pueda orientar, asique solicito ayuda!!!!!!!
Voy a describir mi programa un poco mas a fondo. Tengo un programa que me lee de un fichero las letras que estén almacenadas y me las almacena en una lista, y ahora tengo que coger estas letras que tenga almacenadas en la lista y escribir en otra lista todas las posibles combinaciones de letras que se pudieran crear con estas letras. El tamaño de las letras que tengo que crear va desde 1 (es decir, enumerar todas las letras que tengo) hasta N, siendo N un numero que introduzco como variable a la funcion. Todas las letras se pueden repetir el numero de veces que haga falta.

P.D:El programa lo estoy codificando en PASCAL/Delphi

Muchas gracias
Título: Re: Combinacion De Elementos De Una Lista
Publicado por: vimaci en Sábado 5 de Agosto de 2006, 16:10
ya está hecho
Título: Re: Combinacion De Elementos De Una Lista
Publicado por: fuhrer en Martes 8 de Agosto de 2006, 21:29
Hola.

La verdad no le entiendo muy bien a tu código, pero yo creo que sería más fácil que utilices un arreglo, ya que de esta forma sólo retornas el indice y no pierdes tus elementos como dices que te esta pasando, amenos que te lo hayan pedido con listas entonces revisa bien lo que haces.

Hasta luego.
Título: Re: Combinacion De Elementos De Una Lista
Publicado por: vimaci en Martes 15 de Agosto de 2006, 12:26
bueno, al final conseguí hacer la combinacion, el codigo utilizado es el siguiente, es evidente que tengo una unidad para la gestion de las listas:


procedure Combinacion(M,N:integer; coleccion : tlista; var comb:tlista);
..var
....letra,aux : tlista;
..procedure Combina(pos : integer);
....var i:integer;
......s,pal:tinfo;
....begin
......pal:='';
......if pos > M then
........begin
..........aux:=letra;
..........while aux<>nil do
............begin
..............pal:=pal+(aux^.info);
..............aux:=aux^.sig;
............end;
..........InsertarAlFinal(comb, pal);
..........borrarultimonodo(letra);
........end
......else
........begin
..........for i := 1 to N do
............begin
..............obtenerinfopos(coleccion, s, i);
..............Insertar(letra,s,pos);
..............Combina(pos + 1);
............end;
..........borrarultimonodo(letra);
........end
....end;
..begin
......crear(letra);
......Combina(1);
..end;