in reply to Huffman coding in pure Perl
On the encoding side, it is only slightly harder to build the bit vector directly, using vec() instead of pack 'b'.
The decoding side is harder.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; }
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 |