1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

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

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

    Tatarin Гость

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

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

    grigsoft Well-Known Member

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

    Tatarin Гость

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

    grigsoft Well-Known Member

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

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