Сжатие информации в компьютерных сетях
86
Кодовые комбинации для отображения одинаковых символов
одного и того же сообщения будут различны. Так при поступлении от
источника следующего символа f он будет закодирован по алгоритму FGK
словом 111111, а по алгоритму V отображающая его комбинация 1001
будет на два бита короче. Поэтому, если передача продолжится с символов
d,c,g,e,f или с еще не использованных символов, то формируемые кодовые
слова в алгоритме V будут короче, чем в FGK, т.е. стратегия минимизации
внешнего пути и высоты дерева оптимальна при предположении, что
любой появляющийся символ равновероятен.
Второй отличительной чертой алгоритма V является введение
понятия блока эквивалентных узлов. При этом узлы x и y эквивалентны,
если они имеют одинаковый вес и оба являются либо внутренними, либо
внешними. Узел блока, имеющий (при неявной нумерации) самый высокий
номер, называется лидером блока. Блоки упорядочиваются по увеличению
веса, причем блок листьев веса W должен предшествовать блоку
внутренних узлов того же самого веса.
Третья отличительная особенность алгоритма V заключается в
способе модификации дерева после получения очередного символа.
Главной операцией алгоритма по поддержанию условия неявной
нумерации (*) является скольжение и приращение (SlideAnd Increment).
Суть этой операции состоит в том, что узел, объявленный текущим,
обменивается с лидером своего блока и затем скользит в направлении
корня дерева по соседнему блоку, который непосредственно примыкает к
блоку текущего узла. Скольжение продолжается до тех пор, пока текущий
узел не пройдет весь блок и будет установлен во главу этого блока. Затем
осуществляется приращение веса текущего узла и новым текущим узлом
назначается родитель старого текущего узла. Операция скольжения с
приращением продолжается до достижения корня дерева. При этом выбор
родительского узла зависит от того, являлся ли текущий узел листом или
внутренним узлом. Если текущий узел был листом, то новым текущим
узлом становится родитель, с которым оказался связан текущий узел после
завершения скольжения. А в случае, если текущим узлом был внутренний
узел, то новым текущим узлом назначается его родительский узел, с
которым был связан текущий до начала скольжения.
На рис.4.14 приведен пример процедуры Slide AndIncrement. На
рис.4.14а (1) изображена ситуация, когда текущим узлом р является лист с
весом 4, который в процессе обмена стал лидером блока листьев с весом 4.
На рис.4.14б (1) приведен случай, при котором текущим узлом является
внутренний узел с весом 8. Очевидно, что если текущий узел образует
блок, состоящий из одного узла, то этот узел является и текущим и
лидером одновременно. Все узлы в блоке сдвигаются влево на одну
позицию, чтобы освободить ячейку памяти для текущего узла р. В