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.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^13: Finding All Paths From a Graph From a Given Source and End Node
by LanX (Cardinal) on Nov 02, 2010 at 20:23 UTC | |
by BrowserUk (Pope) on Nov 02, 2010 at 20:33 UTC | |
by LanX (Cardinal) on Nov 02, 2010 at 20:39 UTC | |
by BrowserUk (Pope) on Nov 02, 2010 at 21:14 UTC |
In Section
Seekers of Perl Wisdom