• Sábado 21 de Diciembre de 2024, 10:54

Autor Tema:  Ayuda!!formar Grupos De Puntos Sin Repetición  (Leído 2466 veces)

patpite

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Ayuda!!formar Grupos De Puntos Sin Repetición
« en: Domingo 5 de Diciembre de 2004, 16:11 »
0
Hola a todos,

Necesito vuestra ayuda de forma urgente. Mi problema es el siguiente: tengo un conjunto de M puntos, y he de formar grupos con ellos, agrupándolos de F en F. Usando combinatoria, sé que se forman G grupos, pero no sé cómo codificar un algoritmo que construya esos grupos.

Pondré un ejemplo para intentar aclararlo:

- Defino una variable N=1. Tengo M=3 puntos. Quiero hacer grupos con ellos, y que cada grupo tenga F=(M-N)=2 puntos. El resultado sería:

Puntos: a,b,c.
Grupo1 = (a,B)
Grupo2 = (a,c)
Grupo3 = (b,c)

Hay una función combinatoria que se escribe algo así como "M sobre N" y que me calcula el número de grupos que saldrían, que en este caso serían 3. Eso lo sé hacer. Lo que no sé hacer es COMO FORMAR los grupitos, cómo asociar los puntos de forma correcta.

Estoy intentándolo con bucles for anidados, pero no acierto con la solución. Y la solución debe valer para cualquier valor que le demos a M y N. No sé si es una solución sencilla, o si emplea recursividad o qué.

Por favor!! Ayuda!!

Gracias!

Patricia.

arian

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Ayuda!!formar Grupos De Puntos Sin Repetición
« Respuesta #1 en: Miércoles 12 de Enero de 2005, 08:03 »
0
Lo que necesitas es una rutina que te muestre las combinaciones de N puntos
en conjuntos de M puntos.

procedure MuestraCombinacion(N, M : integer; coleccion : array [1..N] of Punto;)
var
..comb : array [1..M] of Punto;
..usado : array [1..N] of boolean;

..procedure Combina(pos : integer)
..begin
....if pos > M then imprime(comb)
......else
........for i := 1 to N do
..........if not usado then
.............begin
..............usado := true;
..............comb[pos] := coleccion;
..............Combina(pos + 1);
..............usado := false;
............end;
..end;

begin
..for i := 1 to N do usado := false;
..Combina(1);
end;

Tracea este algoritmo para el caso N=3 M=2 para que lo comprendas.
De una manera similar puedes hallar las variaciones y las permutaciones.