![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
w32blaster |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 2.1.2006 Где: Tln/Slmae Репутация: нет Всего: нет |
Господа, здравствуйте!
Мне нужно написать по универу прогу на С, реализующая архиватор по алгоритму Хаффмана. Я вообще специальизировался на Яве и на РНР, но вот С меня поставил в тупик. Бьюсь уже почти месяц, а время поджимает.... Я конечно же не претендую на полное разъяснение, но, может, кто-то где-то делал и осталась прога? Последняя палка в колёсах перед дипломкой.... ![]() Спасибо заранее... email [email protected] |
|||
|
||||
Acer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 5.9.2007 Где: UA::DN Репутация: нет Всего: 8 |
||||
|
||||
w32blaster |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 2.1.2006 Где: Tln/Slmae Репутация: нет Всего: нет |
Ok, я получил последовательность Хаффмана, то есть последовательность 0 и 1. Создал необходимое дерево. Но препод сказал, что этого мало - прога должна обязательно сжимать файлы и распаковывать. Вот. Как я читал во всех мануалах, нужно к полученной последовательности 0001100101010 ещё как-то прибавить само дерево, которое будет являться как бы "каротой", по которой можно будет расшифровать архив. Вот, собсна, и вопрос: как это сделать?
Моё дерево я храню в массиве, где есть каждый элемент с его "Ид", "ПарентИд", значением "лево/парво" и "лист/не лист". По нему я могу сделать двоичную последовательность и, я надеюсь, в будущем смогу обратно восстановить. Но это в теории. А вот на практике я совсем не предстваляю, как это сделать..... :( В Инете во всех статьях повествование оканчивается на последовательности и всё.... жжжесть... из всего курса только один предмет загнал меня в тупик.... ![]() |
|||
|
||||
MaXL |
|
|||
![]() Developer ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 24.10.2005 Где: Владивосток Репутация: нет Всего: 2 |
Ну самый просто вариант, это записывать это дерево в файл, перед шифрованными данными. А в самое начало файл писать "заголовок", т.е. размер этого дерева. И потом ты легко сможешь получить данные с деревом, ну и собственно саму упакованную информацию.
ну можно попробовать ничего не кодировать в двоичном виде, а просто подряд писать элементы с первого до последнего. Ид, можно не хранить, он и будет порядковым номер в этой последовательности. Под "ParentId" можно отвести один байт(если у тебя в алфавите 255 символов). под само значение опять таки один байт, зависит от алфавита ну и лево права снова один байт. вот собственно и всё. Размер массива хранить в заголовке. -------------------- MaXL |
|||
|
||||
Бонифаций |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: нет Всего: 40 |
когда то давно понадобилось написать подобную штуку, только с алгоритмом Шеннона-Фано.. Ну не важно. Там, вместо того, чтобы хранить дерево в файле. мне показалось проще хранить в результирующем файле статистику букв исходного файла. То есть (буква, число сколко раз встречалась)* , получалось компактенее. А дерево при расшифровке просто воссоздавал по этой статистике.
-------------------- Бонифаций. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |