Реферат: Сжатие данных
up[left[u]] := u;
up[right[u]] := u;
end;
end { initialize };
Для того, чтобы отыскать букву и соответствующий ей интервал накопленной
частоты, когда известна отдельная накопленная частота, необходимо обойти дерево
начиная с корня по направлению к букве, производя беглое вычисление интервала
частот, соответствующего текущей ветке дерева. Интервал, соответствующий корню,
есть [0, freq[root]], он должен содержать f. Если отдельный узел деpева i связан
с интервалом [a, b), где a - b = freq[i], то интервалами, связанными с двумя
поддеревьями будут интервалы [a, a+freq[left[i]] ) и [a+freq[left[i]], b). Они
не пересекаются, поэтому путь вниз по дереву будет таким, что f содержится в
подинтервале, связанном с каждым узлом на этом пути. Это показано в
следующей процедуре:
procedure findsymbol( f: integer; var c: codetype; var a, b: integer );
var
i: downindex;
t: integer;
begin
a := 0;
i := root;
b := freq[root];
repeat
t