Во всех задачах будем считать, что при одинаковой частоте меньшим узлом является тот, который содержит меньший байт. При объединении узлом меньший получает код 0, больший - 1.
Выведите последовательность объединений.
Строка символов с кодами от 32 до 127 в десятичной системе счисления.
Выведите последовательность объединений в формате УЗЕЛ + УЗEЛ.
Узел выводится в формате КОДЫ УЗЛА в порядке возрастания в квадратных скобках через запятую:ОБЩАЯ ЧАСТОТА
Например, если объединяются два узла, в первом из которых a и d c частотой 2, а во втором e c частотой 50,
нужно выводить [97, 100]:2 + [101]:50
aaacccbbbddd
[97]:3 + [98]:3 [99]:3 + [100]:3 [97, 98]:6 + [99, 100]:6
Под частотой понимается количество символов.
Байты беззнаковые (со значениями 0-255)
Во всех задачах будем считать, что при одинаковой частоте меньшим узлом является тот, который содержит меньший байт. При объединении меньший узел получает код 0, больший - 1.
Выведите самый длинный код, а если их несколько - лексикографически минимальный.
Строка символов с кодами от 32 до 127 в десятичной системе счисления.
Выведите ответ в формате КОД СИМВОЛА:КОД ХАФФМАНА
12223334444
49:110
Под частотой понимается количество символов
Во всех задачах будем считать, что при одинаковой частоте меньшим узлом является тот, который содержит меньший байт. При объединении меньший узел получает код 0, больший - 1.
Будем кодировать так: два байта на сигнатуру HA ("Haffman Archive"), потом остаток бит в последнем байте в трех битах, например, если в последнем байте будут значимыми только два бита, то записываем как 010. Дальше дерево. И потом код строки (файла).
Дерево записывается так
Если лист, то 0 (один бит) и соответствующий байт.
Если нет - 1 (один бит) и дальше левое поддерево и правое поддерево рекурсивно.
Выведите общее количество байт на кодирование.
Строка символов с кодами от 32 до 127 в десятичной системе счисления.
Выведите одно число
aaaaaaaaaa
5
Под частотой понимается количество символов.
В примере 10 букв "а". Код "a" - однобитный, соответственно на дерево уйдет 9 бит, а сам код 10 бит. Плюс два байта сигнатуры. Плюс три бита на остаток. Получается 10+9+16+3 = 38 бит, поэтому нужно 5 байт.
Во всех задачах будем считать, что при одинаковой частоте меньшим узлом является тот, который содержит меньший байт. При объединении меньший узел получает код 0, больший - 1.
Выведите все полученные коды в порядке возрастания значений байтов. (Байты считаются беззнаковыми со значениями 0..255)
Файл для архивирования
Коды формате
Количество
Код1: значение
Код2: значение
...
12223334444
4 49: 110 50: 111 51: 10 52: 0
Под частотой понимается количество символов
Дан файл в виде hex-строки. Каждый байт файла представлен в ней двумя шестнадцатиричными цифрами.
Выведите начало кодировки по Хаффману (два символа сигнатуры, три бита остатка и дерево) в таком же виде.
Файл для кодирования в виде hex-строки
Закодированные начало в виде hex-строки
61
4841a610
Во всех задачах будем считать, что при одинаковой частоте меньшим узлом является тот, который содержит меньший байт. При объединении меньший узел получает код 0, больший - 1.
"Заархивируйте" файл по алгоритму предыдущей задачи.
Файл для кодирования
Закодированный файл
Под частотой понимается количество символов
Во всех задачах будем считать, что при одинаковой частоте меньшим узлом является тот, который содержит меньший байт. При объединении меньший узел получает код 0, больший - 1.
Разархивируйте файл, сжатый по алгоритму предыдущей задачи.
Файл для разархивирования
Разархивированный файл
Под частотой понимается количество символов