huffmandict

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

Описание

пример

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

пример

[dict,avglen] = huffmandict(symbols,prob,N) генерирует N- словарь кода Хаффмана, использующий алгоритм максимального отклонения. 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]}    {[  0 1]}
    {[2]}    {[  0 0]}
    {[3]}    {[  1 0]}
    {[4]}    {[1 1 1]}
    {[5]}    {[1 1 0]}

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-by- S или S-by-1, где S - количество символов.

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

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

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

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

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

Отклонение для кода Хаффмана, заданная как одно из следующих значений.

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

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

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

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

свернуть все

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

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

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

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

Ссылки

[1] Сайуд, Халид. Введение в сжатие данных. 2nd ed. San Francisco: Morgan Kaufmann Publishers, 2000.

См. также

Функции

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