Код Хаффмана с длиной кодового слова не более L бит — различия между версиями
Строка 12: | Строка 12: | ||
== Сведение к генерации кода Хоффмана с длиной кодового слова не более L бит. == | == Сведение к генерации кода Хоффмана с длиной кодового слова не более L бит. == | ||
+ | Пусть <tex>L</tex> - ограничение на длину кодового слова, а <tex>P=\{p_{1},p_{2},...,p_{n}\}</tex> - частоты символов алфавита. |
Версия 13:50, 17 декабря 2014
Код Хаффмана с длиной слова не более L бит - это вариация классического кода Хоффмана с дополнительным ограничением: длина каждого кодового слова не должна превышать заданной константы. Здесь будет приведен алгоритм, решающий эту задачу за время
, где - максимальная длина кодового слова, - размер алфавита, c помощью сведения задачи к одной из вариаций задачи о банкомате.Задача о банкомате.
В вариации задаче о банкомате, которую мы рассмотрим, у вас имеется
монет. Каждая монета характеризуется двумя параметрами: номиналом и весом. При этом все номиналы являются степенями двойки и не превышают . Необходимо выбрать из имеющихся монет некоторый набор так, чтобы их суммарный номинал был равен (натуральное число), а суммарный вес минимален.Алгоритм решения задачи о банкомате.
Рассмотрим алгоритм решения приведенной выше вариации задачи о банкомате, считая, что решение существует.
- Разделим имеющиеся у нас монеты на списки по номиналу (свой список для каждого номинала) и упорядочим монеты по возрастанию весов внутри списков, а списки в порядке возрастания номиналов.
- Рассмотрим первый список (с монетами самого низкого номинала). Разобьем в нем все монеты на пары (1 и 2, 3 и 4 и т. д.) Заменим каждую пару монет одной новой монетой, номинал и вес которой равен сумме номиналов и весов старых. Если число монет было нечетно, то последнюю монету, которая не имеет пары, исключим из рассмотрения.
- Объединим первый список со вторым так, чтобы монеты в получившемся списке остались упорядочены по весу.
- Будем повторять шаги 2-3 до тех пор, пока у нас не останется один список. В нем будут содержаться монеты номиналом 1 ( ), упорядоченные по весу. Возьмем первые монет из списка. Это и будет ответ к задаче.
Сведение к генерации кода Хоффмана с длиной кодового слова не более L бит.
Пусть
- ограничение на длину кодового слова, а - частоты символов алфавита.