exponenta event banner

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- словарь кода Хаффмана с указанным расхождением.

Примеры

свернуть все

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

Укажите алфавитный вектор символа и вероятностный вектор символа.

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-ary, указанный как скаляр в диапазоне [2, 10]. Это значение должно быть меньше или равно длине входа symbols.

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

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

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

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

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

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

свернуть все

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

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

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

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

Ссылки

[1] Сайуд, Халид. Введение в сжатие данных. 2-я ред. Сан-Франциско: Morgan Kaufmann Publishers, 2000.

См. также

Функции

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