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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Andersen13
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 31
#1

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

14.03.2014, 15:24. Просмотров 256. Ответов 4
Метки нет (Все метки)

Имеется файл. Провел его закодирование по коду Хаффмена, подсчитал частоты символов, построил кодовое дерево, произвол закодирование. Как передать таблицу кодов в файле?
Например, имеется таблица кодов:

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++
#include <stdlib.h> #include <iostream> struct uzel { int key;//хранится в вершине ключ-значение struct uzel...

Проверьте код.Передача массива. - C++
Программа компилируется,но при запуске вылетает. #include "stdafx.h" #include <iostream> using namespace std; char...

Передача объектов функциям(объясните код программы) - C++
Вот программа: #include <iostream> using namespace std; class samp { int i; public: samp(int n){i=n;} void set_i(int...

Нужно доделать код! Исключить из дерева сортировки число "2" - C++
// аисд7.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <iostream> /***********...

Построение В*-дерева - C++
Задание: Построение B* дерева, добавление вершин и балансировка в случае необходимости. подскажите источники где можно взять код, или...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
642 / 563 / 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
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
14.03.2014, 16:09     Код Хаффмена. Передача кодового дерева #4
Вы когда записываете под значения кодов отводите поля одинаковой длины, а потом читайте за раз кол-во байт равное размеру поля, и используйте
например
C++
1
2
3
4
   11
  101
  100
  011
и т.д, т.е каждое поле занимает 5 байт (5 не совсем удачно )

Добавлено через 25 секунд
черт...отформатировалось не так...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2014, 16:28     Код Хаффмена. Передача кодового дерева
Еще ссылки по теме:

вывод дерева - C++
помогите вывести дерево в отсортированном виде вот код создания дерева #include <stdio.h> #include <conio.h> #include <malloc.h> ...

Создание дерева - C++
Подскажите пожалуйста в чем ошибка! Программа создает и выводит экран дерево общего вида #include <iostream.h> #include <iomanip.h> ...

По поводу дерева - C++
"Дано дерево поиска, ключи которого – целые числа (положительные и отрицательные). Определить К-е отрицательное число, следующее за ...

Балансировка дерева - C++
Как сделать балансировку бинарного дерева поиска? template <class T, class I> class node { private: T x; //ключ I...

Класс дерева. - C++
Здравствуйте я понимаю что на эту тему много есть....но к сожалению не понятно....мне нужно написать все данные и все методы работы с ними,...

створення дерева - C++
погогите пожалуста треба створити дерево-формулу за постфиксною формулою. И поминять все правие и левие поддеревя


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

Или воспользуйтесь поиском по форуму:
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     Код Хаффмена. Передача кодового дерева
Ответ Создать тему
Опции темы

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