Изменения

Перейти к: навигация, поиск

Алгоритм Хаффмана для n ичной системы счисления

1531 байт добавлено, 02:29, 4 января 2014
Построение кода Хаффмана
==Построение кода Хаффмана==
€€В приведенном ниже псевдокоде предполагается,что <tex>C</tex>-множество,состоящее из <tex>n</tex> символов,и что каждый из символов <tex>c \in C</tex> - объект с определенной частотой <tex>f(c)</tex>.В алгоритме строится оптимальное дерево <tex>T</tex>,соответствующее оптимальному коду,причем построение идет в восходящем направлении.Процесс построения начинается с множества,состоящего из <tex>|C|</tex> листьев,после чего последовательно выполняется <tex>|C|-1</tex> операций "слияния",в результате,которых образуется конечное дерево.Для идентификации двух наименее часто встречающихся объектов,подлежащих слиянию,используется очередь с приоритетами <tex>Q</tex>,ключами в которой являются частоты <tex>f</tex>.В результате слияния двух объектов образуется новый объект,частота появления которого является суммой частот объединенных объектов:
<math>\mathrm{n}</math> = |<math>\mathrm{|C|}</math>|
<math>\mathrm{Q}</math> = <math>\mathrm{C}</math>
'''for''' <math>\mathrm{i}</math> = 1 '''to''' <math>\mathrm{n}</math> - 1
<math>\mathrm{x}</math> = Extract_Min(<math>\mathrm{Q}</math>) //Extract_Min - изъятие из множества наименьшего элемента
left[<math>\mathrm{z}</math>] = <math>\mathrm{x}</math>
<math>\mathrm{y}</math> = Extract_Min(<math>\mathrm{Q}</math>)
right[<math>\mathrm{z}</math>] = <math>\mathrm{y}</math>
<math>\mathrm{f}</math>[<math>\mathrm{z]}</math> ] = <math>\mathrm{f}</math>[<math>\mathrm{x]}</math> ] + <math>\mathrm{f}</math>[<math>\mathrm{y]}</math>] INSERTInsert(<math>\mathrm{Q}</math>, <math>\mathrm{z}</math>)
'''return''' Extract_Min(<math>\mathrm{Q}</math>) //Возврат корня дерева
 
Алгоритм работает за <tex> {O(n\log{n}}) </tex> для алфавита из <math>\mathrm{n}</math> символов.
Анонимный участник

Навигация