Помогите с алгоритмом

Тема в разделе "MS Visual C++", создана пользователем Tatarin, 2 мар 2007.

Статус темы:
Закрыта.
  1. Tatarin

    Tatarin Гость

    Всем здравствуйте!
    Я пишу нечто вроде архиватора основоного на алгоритме сжатия данных методом Шенона-Фано учебное пособие (и уже всех этим порядком достал) и уменя возникают проблема за проблемой и вот:
    вопрос при кодировании кажному символу присваивается определенный код например 'a' 00, 'b' 010 итп (не путать с кодировкой ASCII) затем я представляю символы в бинарном виде по ASCII получается нечто вроде таблицы.
    теперь мне надо запихать таблицу т.е. символы в бинарном виде и их коды полученые по алгоритму в бинарный фаил. вроде с запихиванием проблем не возникает но вот как сделать так чтоб потом эту таблицу можно было из файла считать ведь там получается нечто вроде 01010101010101000101010101010 сплошной код, я конечно понимаю что каждый символ 8 бит но коды полученые для символов алгоритмом могут быть разной длинны, как быть

    и если кто знаком с этим методом сжатия напишите как лучше оформить весь процесс
     
  2. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Ну вообщем-то процесс распаковки тоже в методе объяснен - скорее всего коды отличаются началом, так что никакой другой код не начинается с 00 и 010. Поэтому 00010 однозначно раскодируются как 'аб'. Думаю, в интернете полно реализаций. Навскидку могу предложить промежуточный класс, извлекающий по биту последовательно, и обработчик, который добавляет к текущему коду отданные биты и проверяет по таблице - не является ли это кодом некоего символа.
     
  3. Tatarin

    Tatarin Гость

    Да коды действительно различаются началом но проблема в том что если я занесу таблицу для раскодирования в бинарный фаил( как сплошную строку бит) и допустим я сичтатаю 8 бит первого символа , как я узнаю сколько бит считать для кода этого символа ведь он не факт что будет 8 бит а скорее всего как в примере 001 или 10011, как узнать когда я будусчитывать уже второй символ и его код?
     
  4. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    ну для хранения самой таблицы, конечно, надо внести поправки - например число бит в различных символах - от 3 до 16. Это кодируется 4 битами. Вот и делай таблицу так: 4 бита (длина следующего символа), биты символа, 4 бита длина, символ и т.д.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей