http://www.perlmonks.org?node_id=869076


in reply to Re^11: Finding All Paths From a Graph From a Given Source and End Node
in thread Finding All Paths From a Graph From a Given Source and End Node

Simply avoiding the array-copy my @path=@_ makes a factor 4.5 performance boost...

Wow. I'm amazed that avoiding the copying of such a small array had such a dramatic affect on the performance. I guess it must be being copied very many times.

In mine, I tried building the hash from the array rather than carrying it around, and it produced an ~8% speed-up. Then I tried using $_[n] instead of named parameters and it leached less than 5% more. The first is worth having, the second not:

sub _findPaths3 { return $_[0]->( @{ $_[4] }, $_[3] ) if $_[2] eq $_[3]; my %seen; $seen{ $_ } = 1 for @{ $_[4] }, $_[2]; for ( grep !$seen{ $_ }, @{ $_[1]->{ $_[2] } } ) { _findPaths3( $_[0], $_[1], $_, $_[3], [ @{ $_[4] }, $_[2] ] ), } } sub findPaths3(&@) { _findPaths3( @_, [] ); }

Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.