• Publicidad

Número de combinaciones

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Número de combinaciones

Notapor asegurac » 2010-09-22 10:17 @470

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.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #! /usr/bin/perl -w
  2.  
  3. use Math::Combinatorics;
  4.  
  5. my $file = $ARGV[0];
  6.  
  7. open (FILE, $file);
  8.  
  9. my @n = <FILE>;
  10.         chomp @n;
  11.  
  12.  
  13.  
  14.   print "combinations of 2 from: ".join(" ",@n)."\n";
  15.   print "------------------------".("--" x scalar(@n))."\n";
  16.  
  17.  
  18. my $combi;
  19. my $combinat = Math::Combinatorics->new(count => 2,data => [@n],);
  20. while(my @combo = $combinat->next_combination){
  21.        
  22.         #print scalar @combo."\n";
  23.         $combi= join(' ', @combo);
  24.         print "$combi\n";
  25. }
  26.   print "\n";
  27. close FILE;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4



El fichero de prueba que estoy utilizando contiene los siguiente caracteres:

Sintáxis: [ Descargar ] [ Ocultar ]
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:

Sintáxis: [ Descargar ] [ Ocultar ]
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.
asegurac
Perlero nuevo
Perlero nuevo
 
Mensajes: 34
Registrado: 2008-10-31 05:52 @286

Publicidad

Re: Número de combinaciones

Notapor explorer » 2010-09-22 11:31 @522

Te vale con crear y usar una variable contador.

Al inicio, antes del bucle, pones

my $contador = 0;

Luego, dentro del bucle, y después de imprimir la combinación, haces el incremento y la comprobación de que hemos llegado al final:

last if ++$contador == 10_000;
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron