TruP:

Is this loop executed once, or are you doing it repeatedly during your program? If the latter, it might be that you can factor the code to move some of the processing out of a tight inner loop. If you can show a bit more of your program (with a *little* sample data) people might be able to dig in a little better to find some optimization opportunities.

Suppose, for example, that your loop was the scoring section of a genetic algorithm and you were recomputing the score once per each generation. If that were the case, and you were changing the genes of only half your population at a time, you could perhaps retain the scores after you compute them, and then skip the calculation for any item that you've already computed a score for:

my %scored; . . . foreach my $a (@{ $array_ref }) { if (exists $scored{$a}) { # We've already scored this one push @{ $bar->{$scored{$a}}, $a; next; } my $i = 0; foreach my $b (split('-', $a)) { foreach my $c (keys %{ $hash_ref }) { $i += $foo->{$b}->{$c}->{'value'}; } } $scored{$a} = $i; push @{ $bar->{$i} }, $a; }

...roboticus

When your only tool is a hammer, all problems look like your thumb.


In reply to Re: Optimize a perl block by roboticus
in thread Optimize a perl block by IruP

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.