![]() |
|
go ahead... be a heretic | |
PerlMonks |
Re^3: Hash checkingby njcodewarrior (Pilgrim) |
on Apr 28, 2007 at 18:28 UTC ( #612586=note: print w/replies, xml ) | Need Help?? |
Thanks for the reply GrandFather. Not that I didn't believe you, but here's the proof: #! /usr/bin/perl use strict; use warnings; use File::Spec; use Data::Dumper; use Benchmark qw( timethese cmpthese ); my ( undef, undef, $app ) = File::Spec->splitpath( $0 ); open my $DATA, '<', './AXP_FACS.DAT' or die "Error opening file: $!"; my @faclist = (<$DATA>); chomp @faclist; close $DATA; sub grep_by_array { my ( $ref ) = @_; my @faclist = @$ref; my @found; foreach my $integer ( 1..5000 ) { if ( grep { /\b$integer\b/ } @faclist ) { unshift @found, $integer; } } return \@found; } # Convert the array to a hash with the numbers as keys my %list = map { $_ => 1 } @faclist; sub grep_by_hash { my ( $ref ) = @_; my %faclist = %$ref; my @found; foreach my $integer( 1..5000 ) { if ( exists $faclist{$integer} ) { unshift @found, $integer; } } return \@found; } # Benchmark the 2 subs my $r = timethese( 1000, { 'array' => sub{ grep_by_array(\@faclist) }, 'hash' => sub{ grep_by_hash(\%list) }, } ); cmpthese( $r ); RESULTS: Benchmark: timing 5000 iterations of array, hash... array: 339 wallclock secs (339.02 usr + 0.04 sys = 339.06 CPU) @ 14.75/s (n=5000) hash: 8 wallclock secs ( 8.27 usr + 0.00 sys = 8.27 CPU) @ 604.59/s (n=5000) Rate array hash array 14.7/s -- -98% hash 605/s 4000% -- That's quite an improvement using a hash! njcodewarrior
In Section
Seekers of Perl Wisdom
|
|