Форум программистов, компьютерный форум CyberForum.ru

Код Хаффмена. Передача кодового дерева - C++

Восстановить пароль Регистрация
 
Andersen13
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 31
14.03.2014, 15:24     Код Хаффмена. Передача кодового дерева #1
Имеется файл. Провел его закодирование по коду Хаффмена, подсчитал частоты символов, построил кодовое дерево, произвол закодирование. Как передать таблицу кодов в файле?
Например, имеется таблица кодов:

a - 11
b - 101
c - 100
d - 011
e - 010
f - 001
g - 0001
h - 000001
j - 000000

Необходимо сохранить файл с таким содержимым:

---------------------
таблице кодов
---------------------
закодированная
последовательность
битов
---------------------

Последовательность битов я сохраняю. Как сохранить таблицу кодов?
Когда записал просто пары чисел друг за другом в файл, то коды типа 001, 0001, 00001 при считывание воспринимаются как один, т.к. сохранял и считывал их как числа типа DWORD.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2014, 15:24     Код Хаффмена. Передача кодового дерева
Посмотрите здесь:

C++ Передача значения и передача переменной
Создание дерева C++
Исправить код бинарного дерева C++
C++ По поводу дерева
C++ Проверьте код.Передача массива.
вывод дерева C++
C++ Код Хаффмана реализованный через построение бинарного дерева
Реализация 2-3 дерева C++
C++ Нужно доделать код! Исключить из дерева сортировки число "2"
Инициализация дерева C++
Запись в файл кодового дерева при сжатии по методу Хаффмана C++
C++ Передача объектов функциям(объясните код программы)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
640 / 561 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
14.03.2014, 15:37     Код Хаффмена. Передача кодового дерева #2
Цитата Сообщение от Andersen13 Посмотреть сообщение
a - 11
b - 101
c - 100
d - 011
e - 010
f - 001
g - 0001
h - 000001
j - 000000
а такое представление Вам не подходит? зачем оформлять в виде таблицы, или потом этот файл надо открывать и что бы человек видел рез-т, тут вроде проблема в форматировании ввода....
Andersen13
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 31
14.03.2014, 15:39  [ТС]     Код Хаффмена. Передача кодового дерева #3
aLarman, Нужно сохранить файл, потом загрузить закодированный файл в программу и раскодировать его. Это же логично? Зачем кодировать файл, если его не возможно потом раскодировать.
aLarman
640 / 561 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
14.03.2014, 16:09     Код Хаффмена. Передача кодового дерева #4
Вы когда записываете под значения кодов отводите поля одинаковой длины, а потом читайте за раз кол-во байт равное размеру поля, и используйте
например
C++
1
2
3
4
   11
  101
  100
  011
и т.д, т.е каждое поле занимает 5 байт (5 не совсем удачно )

Добавлено через 25 секунд
черт...отформатировалось не так...
Andersen13
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 31
14.03.2014, 16:28  [ТС]     Код Хаффмена. Передача кодового дерева #5
aLarman, Ну то есть вы имеете ввиду

a - 11
b - 101
c - 100
d - 011
e - 010
f - 001
g - 0001
h - 000001
j - 000000

будет выглядеть так?

[a]00000011[b]00000101[c]00000100[d]00000011[e]00000010[f]00000001[g]00000001[h]000000001[j]00000000

где [i] - последовательность битов кодирующих данный символ.

Я так и делал, но как видно коды для символов f, g, h записались одинаковые, и при считывании они будут восприниматься одинаково и позже будет не понятно какой из символов брать.
Yandex
Объявления
14.03.2014, 16:28     Код Хаффмена. Передача кодового дерева
Ответ Создать тему
Опции темы

Текущее время: 06:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru