Форум программистов, компьютерный форум, киберфорум
Наши страницы

кодирование хаффмана - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ход конем http://www.cyberforum.ru/cpp-beginners/thread518740.html
На шахматной доске (8х8) стоят конь и пешка. Конь располагается на поле А, пешка - на поле B. Найти минимальное количество ходов, за которые конь доберется до пешки, если последняя стоит на месте....
C++ Вычитание целых и комплексных чисел Помогите пожалуйста с решением... Написать перегруженные функции и основную программу, а) для вычитания целых чисел; б) для вычитания комплексных чисел. http://www.cyberforum.ru/cpp-beginners/thread518731.html
C++ Пропущенные цифры
Подскажите как реализовать на С? Добавлено через 17 минут Всё получилось. Тема закрыта
Получение данных из реестра C++
Вот кусок кода для проверки: HKEY fKey; DWORD pcbData = 255; char* pvData = new char; if(RegOpenKeyEx(HKEY_CLASSES_ROOT, ".xml", 0, KEY_QUERY_VALUE, &fKey) == ERROR_SUCCESS) ...
C++ Вычислить сумму элементов матрицы лежащих слева от побочной диагонали. http://www.cyberforum.ru/cpp-beginners/thread518655.html
Вычислить сумму элементов матрицы Q (10x10), лежащих слева от побочной диагонали. заранее спасибо)
C++ Деление многочленов, нахождение НОД При реализации НОД у меня многочлен делится на производную идет вот такой порядок: f(x) = g(x)∙q1(x) + r1(x), (1) затем, если r1(x) ≠ 0, – второго данного многочлена, g(x), на первый остаток – на... подробнее

Показать сообщение отдельно
soft.creator
104 / 104 / 4
Регистрация: 17.10.2010
Сообщений: 283
24.03.2012, 22:41
А попробуйте более короткие коды начинать с нуля, а более длинные - с единицы.
То есть, если из одного и того же узла дерева Хаффмана выходят два поддерева, то поддерево, в которое мы попадаем по 0, должно содержать более короткие коды. Не исключено, что все будет работать корректно.

Добавлено через 18 минут
То, что Вы прибавили 128, ничего не меняет, дерево Хаффмана от этого не изменится. А EOB (End Of Block) - это маркер конца блока, он должен присутствовать и говорит о том, что далее, до конца блока, следует завершающая серия нулей и больше ничего кодировать в этом блоке не надо. Отсутствовать он вроде не должен.

Добавлено через 16 минут
И еще одно наблюдение. Абстрактное, но Вы его можете проследить на кодах из jpegsnoop. Допустим, есть 3 кода длины 2 и дерево кодов большей длины. В этом случае коды длины 2 будут 00, 01, 10. А вот дерево будет "расти" из 11.
То есть, если на одном и том же уровне есть и терминальные вершины (т.е. собственно коды символов), и "корни" деревьев, коды с меньшим бинарным значением отдаются для терминальных вершин, а с большим - для дальнейшего роста деревьев.
То, что я написал в самом начале поста #4 - частный случай этого правила. Так что, если Вы реализуете построение дерева способом, описанным в предыдущем абзаце, Ваши коды должны совпасть с кодами jpegsnoop.
И еще по EOB - думаю, он не должен присутствовать, если последний символ блока - ненулевой. А в остальных случаях он обязателен.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.