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


in reply to Re: H of A optimization
in thread H of A optimization

I think abitkin wants to make sure that $b isn't in any of the lists in %edgeHash, not to make sure that this specific edge didn't already exist.

I think a better answer is:

next if $already_seen{$b}++;
If the values are $b are densely packed small positive integers, an array may be a better choice of data structures for already_seen

The new code:

my %edgeHash; my %countHash; my %already_seen; while(<stdin>){ # Reading an edge list if(/^\s*([0-9]+)\s+([0-9]+)\S*$/){ my $a = "$1"; my $b = "$2"; # Eliminate loops next if $already_seen{$b}; push @{$edgeHash{$a}}, $b; } }
I hope this helps.

Alan