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

кодирование хаффмана - 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) //Открываем ключ HKEY_CLASSES_ROOT/.xml { if (RegQueryValueEx(fKey, "", NULL, NULL, (LPBYTE)pvData, &pcbData) == ERROR_SUCCESS) //Читаем его значение (по умолчанию) - "xmlfile" {
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), на первый остаток – на многочлен r1(x): g(x) = r1(x)∙q2(x) + r2(x), (2) далее, если r2(x) ≠ 0, – первого остатка, r1(x), на второй остаток, r2(x): r1(x) = r2(x)∙q3(x) + r3(x), (3) затем, если r3(x) ≠ 0, – второго... подробнее

Показать сообщение отдельно
soft.creator
 Аватар для soft.creator
103 / 103 / 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 - думаю, он не должен присутствовать, если последний символ блока - ненулевой. А в остальных случаях он обязателен.
 
Текущее время: 15:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru