[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

RE: [OT]Re: Programa extremadamente lento




> -----Mensaje original-----
> De: Victor H De la Luz [mailto:itztli@gmail.com]
> Enviado el: martes, 03 de febrero de 2009 17:52
> Para: Debian Usuarios
> Asunto: [OT]Re: Programa extremadamente lento
> 
> 2009/2/3 Gorka <gorkalinux@yahoo.es>:
> > Hola.
> >
> > Tengo un script de perl con este bucle:
> >
> >  for (my $j=0;$j<=$#fichero1;$j++)
> >  {
> >    if (@fichero1[$j] eq $valor1)
> >    {
> >      $token = 1;
> >    }
> >  }
> >
> > El problema es que fichero1 tiene 32 millones de registros y que,
> además,
> > tengo que hacer este bucle millones de veces, por lo que he calculado
> que me
> > tardaría AÑOS en acabar.
> > ¿Alguien sabe alguna manera de optimizarlo? ¿O hay algún otro
> lenguaje de
> > programación bajo linux donde pueda hacer esto muchísimo más rápido?
> > Gracias.
> >
> >
> 
> Mta, es de los clasicos problemas que se ven faciles pero en la
> realidad ya no tanto. Creo que depende de lo que estas tratando de
> hacer.
> 
> ¿Que estas buscando? ¿Tu lista de datos esta ordenada? ¿Que tipo de
> datos es el que buscas? ¿Que codificación tiene tu archivo?
> 
> pdt: Creo que es un [OT]
> 
> --
> ItZtLi

Hola, Víctor.

La lista está ordenada. Los datos del fichero (un fichero que crea
automáticamente un programa en linux) inicialmente eran ...

>462_18_279_F3,1_-654315.2
T0130330212003123010013130
>462_32_347_F3,1_4720359.2
T3013112021230101112012000
>462_35_39_F3,1_-1719430.0
T0000221230220202223010131
>462_36_354_F3,1_-3810561.2
T2332000221032111021000320
>593_1644_272_F3,1_-1322672.0
T0131030203231031022021210

.... pero yo los he volcado a un vector @fichero1 quedándome sólo la parte
que me interesa comparar con $valor1, que es ...

462_18_279
462_32_347
462_35_39
462_36_354
593_1644_272

.... que es lo que, como te digo, contienen el vector @fichero1.

Como la lista está ordenada, intenté hacer lo siguiente, ...

  for (my $j=0;($j<=$#fichero1)and($valor1 ge @fichero1[$j]);$j++)
  {
    if (@fichero1[$j] eq $valor1)
    {
      $token = 1;
    }
  }

.... pero por algún motivo, que aún no comprendo, me deja algunos valores
fuera. 

¿Se te ocurre cómo ganar velocidad con este script? 
Un saludo.




Reply to: