будущего графа (дерева). В центре лучше расположить символ с наибольшим весом.
Выбрать две вершины с наименьшими весами и объединить их — создать новую вершину, вес которой задать равным сумме весов двух предыдущих вершин.
Расставить на рёбрах графа числа «0» и «1» (например, на верхнем ребре — «0», а на нижнем — «1»).
Чтобы выбранные вершины больше не просматривались, стереть их веса.
Продолжить объединение вершин, каждый раз выбирая пару с наименьшими весами, до тех пор, пока не останется одна вершина — корень дерева. Вес этой вершины будет равен длине сжимаемого массива.
Создать кодовую таблицу. Для определения двоичного кода каждой буквы надо пройти от корня до этой вершины, выписывая «0» и «1», встречающиеся на маршруте.
000
001
01
10
1100
1101
1110
1111
0
0
0
После того, как коды символов построены, остаётся сгенерировать сжатый массив данных, для чего надо снова прочесть входные данные и каждый символ заменить соответствующим ему кодом.
Вход:
VENI, VIDI, VICI
Выход:
01111011111000100001101
101100010000110110010
Исходный текст состоит из 16 символов, т. е. его длина в не-
сжатом виде будет равна 16 байт или 128 бит.
Код сжатого текста будет занимать 44 бита.
Получаем коэффициент сжатия, равный 128/44 ≈ 2,9.