Адапт. кодир. методом Хаффмана
было предложено независимо Фоллером и Галлагером. В 1985 Кнут разработал оконч.
вариант алг. и он получил назв. FGK (Faller, Gallager, Knuth) алг. Суть алг. заключ. в том, что
символы почти любого алфавита имеют разную вероятность появл. в тексте.
Следов., если предст. их не в ASCII формате, а длину кода наиболее часто
встречаемых уменьш. за счёт увелич. длины кода редких символов, можно хорошо
сжать исх. текст. Алг. исп. видоизмен. дерево
Хаффмана. Отлич. тем, что в нем присутствует 0-вершина. Она исп. для кодир.
символов до этого не встреч. Так же вершины на каждом уровне дерева должны располог.
в неубыв. порядке. Алгоритм кодир. : [AN+1
– прочитанный символ] ЕСЛИ
AN+1 был показан ранее, т.е есть уже его лист -
передается код листа -
вес листа увеличивается на 1 - все весы вершин на пути от листа к корню тоже увелич.
на 1 - дерево перестраивается ИНАЧЕ - передается код 0-вершины - передается код символа - 0-вершина расщепляется на новую вершину и лист AN+1
с весом 1 - дерево перестраивается Виттер дополнил FGK таким
условием: при обходе дерева по слоям (снизу-вверх, слева-направо) необх., чтобы
лист находился перед внутр. верш., если вес листа и внутр.верш. одниковы. Поэтому колич. обменов узлами,
при котором текущ. узел перемещ. вверх по кодовому дереву, в процессе его
модиф., огранич. единицей. В алгоритме
BSTW(Bentley,Sleator,Tarjan,Wei) исп. нумерованный односвязный список
элементов. Алгоритм BSTW: ЕСЛИ
элемент был в списке, то -
передается номер эл-та в списке -
элемент перемещается в голову списка ИНАЧЕ -
передается число эл-тов списка + 1 -
передается код элемента -
новый элемент вставляется в голову списка
|