in reply to Re^10: Do you really want to use an array there?
in thread Do you really want to use an array there?
use strict; use Benchmark qw( timethese cmpthese ); my $df=1000000;my $tf=3; our $packedW =''; our $packedVec =''; my $nr=0; foreach(0 .. $df) { $packedW .= pack 'w*', $_; $packedW .= pack 'w*', $tf; vec ($packedVec, $nr++, 32) = $_; # DOC ID...... vec ($packedVec, $nr++, 32) = $tf; # TF...... } cmpthese 10, { unpackW => q[ my $odd=0;my %pack;my $doc=0; foreach (unpack 'w*', $packedW) { if($odd%2!=0) { $pack{$doc}=$_;$odd++;next; } $doc=$_; $odd++; } ], unVec => q[ my $docID=0; my $tf=0; my $index=0; my %vec; foreach (0 .. 1000000) { $docID = vec ($packedVec, $index++, 32); $tf = vec ($packedVec, $index++, 32); $vec{$docID}=$tf; } ], }; print "$_: ", length( do{ no strict; ${$_} } ) for qw[ packedVec packedW ]; __END__ s/iter unpackW unVecNoGaP unpackW 21.7 -- -60% unVec 8.69 149% -- packedVec: 8000008 packedW: 3983492
|
|---|