public static function GetSymbolStream($frequencies, $binary_stream)
 {
     $pos = 0;
     $symbol_stream = '';
     $stream_length = strlen($binary_stream);
     while ($pos < $stream_length) {
         $codes = Huffman::GetCodes($frequencies->AsTable());
         $longest = max(array_map('strlen', $codes));
         $lookup_codes = array_flip($codes);
         $found = false;
         for ($length = $longest; $length > 0; $length--) {
             $check_digits = substr($binary_stream, $pos, $length);
             if (isset($lookup_codes[$check_digits])) {
                 $symbol_stream .= $lookup_codes[$check_digits];
                 $frequencies->Adjust($lookup_codes[$check_digits], -1);
                 $pos += $length;
                 $found = true;
                 break;
             }
         }
         if (!$found) {
             return false;
         }
     }
     return $symbol_stream;
 }
Example #2
0
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<body>
<?php 
include 'huffman.php';
$freq = array(array('ə', '11.49'), array('n', '7.11'), array('r', '6.94'), array('t', '6.91'), array('ɪ', '6.32'), array('s', '4.75'), array('d', '4.21'), array('l', '3.96'), array('i', '3.61'), array('k', '3.18'), array('ð', '2.95'), array('ɛ', '2.86'), array('m', '2.76'), array('z', '2.76'), array('p', '2.15'), array('æ', '2.10'), array('v', '2.01'), array('w', '1.95'), array('u', '1.93'), array('b', '1.80'), array('e', '1.79'), array('ʌ', '1.74'), array('f', '1.71'), array('aɪ', '1.50'), array('ɑ', '1.45'), array('h', '1.40'), array('o', '1.25'), array('ɒ', '1.18'), array('ŋ', '0.99'), array('ʃ', '0.97'), array('y', '0.81'), array('g', '0.80'), array('dʒ', '0.59'), array('tʃ', '0.56'), array('aʊ', '0.50'), array('ʊ', '0.43'), array('θ', '0.41'), array('ɔɪ', '0.10'), array('ʒ', '0.07'));
$freq = array(array('ə', '10.74'), array('ɪ', '8.33'), array('n', '7.58'), array('t', '6.42'), array('d', '5.14'), array('s', '4.81'), array('l', '3.66'), array('ð', '3.56'), array('r', '3.51'), array('m', '3.22'), array('k', '3.09'), array('e', '2.97'), array('w', '2.81'), array('z', '2.46'), array('v', '2'), array('b', '1.97'), array('aɪ', '1.83'), array('f', '1.79'), array('p', '1.78'), array('ʌ', '1.75'), array('eɪ', '1.71'), array('i', '1.65'), array('əʊ', '1.51'), array('h', '1.46'), array('æ', '1.45'), array('ɒ', '1.37'), array('ɔ', '1.24'), array('ŋ', '1.15'), array('u', '1.13'), array('g', '1.05'), array('ʃ', '0.96'), array('j', '0.88'), array('ʊ', '0.86'), array('ɑ', '0.79'), array('aʊ', '0.61'), array('ʤ', '0.6'), array('ɜ', '0.52'), array('ʧ', '0.41'), array('Ɵ', '0.37'), array('eə', '0.34'), array('ɪə', '0.21'), array('oɪ', '0.14'), array('ʒ', '0.1'), array('ʊə', '0.06'));
var_dump(Huffman::GetCodes($freq));
?>
</body>
</html>