Hola,
Tengo el siguiente problema. Deseo generar una serie de combinaciones a partir de un conjunto de datos. Estuve investigando y al parecer existe un módulo en CPAN que hace esto muy fácil. El módulo es "Math::Combinatorics". Ya he jugado un poco con el código y va bien.
Using perl Syntax Highlighting
#! /usr/bin/perl -w
use Math::Combinatorics;
my $file = $ARGV[0];
open (FILE, $file);
my @n = <FILE>;
chomp @n;
print "combinations of 2 from: ".join(" ",@n)."\n";
print "------------------------".("--" x scalar(@n))."\n";
my $combi;
my $combinat = Math::Combinatorics->new(count => 2,data => [@n],);
while(my @combo = $combinat->next_combination){
#print scalar @combo."\n";
$combi= join(' ', @combo);
print "$combi\n";
}
print "\n";
close FILE;
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
El fichero de prueba que estoy utilizando contiene los siguiente caracteres:
Using text Syntax Highlighting
a
b
c
d
e
f
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
El código produce el siguiente resultado:
Using text Syntax Highlighting
combinations of 2 from: a b c d e f
------------------------------------
a b
a c
a d
a e
a f
b c
b d
b e
b f
c d
c e
c f
d e
d f
e f
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Son las posibles combinaciones entre los caracteres incluidos en el fichero. Hasta aquí todo bien. En mi caso, a partir de mis datos (n=337) necesito generar combinaciones de 160. El número de posibles combinaciones es muy alto. A mi solo me interesa obtener hasta 10 mil combinaciones. ¿Qué modificación puedo hacer al código anterior para restringir el número de combinaciones? Por ejemplo, en el resultado que muestro anteriormente la salida del código son 15 combinaciones, ¿qué podría hacer para solo obtener 5 de las 15? Ya intenté introducir algunas condiciones con "if", modificaciones al bucle "while" y no tengo éxito.
Saludos.