Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Re: Huffman coding in pure Perl

by Anno (Deacon)
on Mar 04, 2007 at 19:20 UTC ( [id://603124]=note: print w/replies, xml ) Need Help??


in reply to Huffman coding in pure Perl

The main inefficiency is that bit operations are not really bit operations; rather, the module uses ASCII strings of 0s and 1s, and only packs it into a real bit string after the encoded string has been constructed. ...

On the encoding side, it is only slightly harder to build the bit vector directly, using vec() instead of pack 'b'.

sub huff1 { my ( $string, $codes) = @_; my ( $ret, $len) = ( '', 0); # $len counts bits for ( split( //, $string), '_eos' ) { vec( $ret, $len ++, 1) = $_ for split //, $codes->{ $_}; } return $ret; }
The decoding side is harder.

Update: No, it isn't. Dehuff is as easily adapted to vec().

sub dehuff1 { my ( $string, $code) = @_; my %decode = reverse %$code; my ( $ret, $c, $where) = ( '', '', 0); while ( 1 ) { $c .= vec( $string, $where ++, 1); next unless exists $decode{ $c}; last if $decode{ $c} eq '_eos'; $ret .= $decode{ $c}; $c = ''; } return $ret; }

Anno

Replies are listed 'Best First'.
Re^2: Huffman coding in pure Perl
by vrk (Chaplain) on Mar 04, 2007 at 19:46 UTC

    I know. I originally had vec in mind, but doing the decoding that way felt like too much of a drag, and I don't really need this module. The current implementation is arguably easier to understand, which was what I wanted to do: understand the algorithm.

    --
    print "Just Another Perl Adept\n";

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://603124]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others browsing the Monastery: (None)
    As of 2024-04-25 00:55 GMT
    Sections?
    Information?
    Find Nodes?
    Leftovers?
      Voting Booth?

      No recent polls found