huffmandict

Сгенерируйте словарь Кода Хаффмана для источника с известной вероятностной моделью

Описание

пример

[dict,avglen] = huffmandict(symbols,prob) генерирует бинарный словарь Кода Хаффмана, dict, для исходных символов, symbols, при помощи максимального алгоритма отклонения. Вход prob задает вероятность вхождения для каждого из вводимых символов. Длина prob должен равняться длине symbols. Функция также возвращает среднюю длину кодовой комбинации avglen из словаря, взвешенного согласно вероятностям во входе prob.

пример

[dict,avglen] = huffmandict(symbols,prob,N) генерирует N- словарь Кода Хаффмана ary с помощью максимального алгоритма отклонения. N не должен превышать количество исходных символов.

[dict,avglen] = huffmandict(symbols,prob,N,variance) генерирует N- словарь Кода Хаффмана ary с заданным отклонением.

Примеры

свернуть все

Сгенерируйте бинарный словарь Кода Хаффмана, дополнительно возвратив среднюю разрядность кода.

Задайте вектор алфавита символа и вектор вероятности символа.

symbols = (1:5); % Alphabet vector
prob = [.3 .3 .2 .1 .1]; % Symbol probability vector

Сгенерируйте бинарный Код Хаффмана, отобразив среднюю разрядность кода и массив ячеек, содержащий словарь кодовой комбинации.

[dict,avglen] = huffmandict(symbols,prob)
dict=5×2 cell array
    {[1]}    {1x2 double}
    {[2]}    {1x2 double}
    {[3]}    {1x2 double}
    {[4]}    {1x3 double}
    {[5]}    {1x3 double}

avglen = 2.2000

Отобразите пятую кодовую комбинацию из словаря.

samplecode = dict{5,2} % Codeword for fifth signal value
samplecode = 1×3

     1     1     0

Используйте генератор словаря кода в функции кодера Хафмана, чтобы сгенерировать бинарные и троичные Коды Хаффмана.

Задайте вектор алфавита символа и вектор вероятности символа.

symbols = (1:5); % Alphabet vector
prob = [.3 .3 .2 .1 .1]; % Symbol probability vector

Сгенерируйте бинарный Код Хаффмана, отобразив массив ячеек, содержащий словарь кодовой комбинации.

[dict,avglen] = huffmandict(symbols,prob);
dict(:,2) = cellfun(@num2str,dict(:,2),'UniformOutput',false)
dict=5×2 cell array
    {[1]}    {'0  1'   }
    {[2]}    {'0  0'   }
    {[3]}    {'1  0'   }
    {[4]}    {'1  1  1'}
    {[5]}    {'1  1  0'}

Сгенерируйте троичный Код Хаффмана с минимальным отклонением.

[dict,avglen] = huffmandict(symbols,prob,3,'min');
dict(:,2) = cellfun(@num2str,dict(:,2),'UniformOutput',false)
dict=5×2 cell array
    {[1]}    {'2'   }
    {[2]}    {'1'   }
    {[3]}    {'0  0'}
    {[4]}    {'0  2'}
    {[5]}    {'0  1'}

Входные параметры

свернуть все

Исходные символы в виде числового вектора, числового массива ячеек или алфавитно-цифрового массива ячеек. symbols перечисляет отличные значения сигналов, которые производит источник. Если symbols массив ячеек, это должен быть 1 S или S-by-1 массив ячеек, где S является количеством символов.

Типы данных: double | cell

Вероятность вхождения для каждого символа в виде числового вектора в области значений [0, 1]. Элементы этого вектора должны суммировать к 1. Длина этот вектор должна равняться длине входа symbols.

Типы данных: double

Словарь Кода Хаффмана не в виде числового скаляра в области значений [2, 10]. Это значение должно быть меньше чем или равно длине входа symbols.

Типы данных: double

Отклонение для Кода Хаффмана в виде одного из этих значений.

  • 'min' — Эта функция генерирует N- словарь Кода Хаффмана ary с минимальным отклонением. Если вы не задаете входной параметр отклонения, функция использует этот случай.

  • 'max' — Эта функция генерирует N- словарь Кода Хаффмана ary с максимальным отклонением.

Типы данных: char

Выходные аргументы

свернуть все

Словарь кода Хаффмана, возвращенный как массив 2D ячейки столбца. Первые списки столбцов отличные значения сигналов от входа symbols. Второй столбец соответствует кодовым комбинациям Хафмана, где каждая кодовая комбинация Хафмана представлена как числовой вектор-строка. Если вы задаете входной параметр N, функция возвращает dict как N- словарь Кода Хаффмана ary.

Типы данных: double | cell

Средняя длина кодовой комбинации, взвешенная согласно вероятностям во входе prob, возвращенный в виде положительного числа.

Типы данных: double

Ссылки

[1] Sayood, Халид. Введение в Сжатие данных. 2-й редактор Сан-Франциско: Издатели Моргана Кофманна, 2000.

Представлено до R2006a