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

  • Автор темы Tatarin
  • Дата начала
Статус
Закрыто для дальнейших ответов.
T

Tatarin

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

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

grigsoft

Well-Known Member
15.11.2005
735
0
#2
Ну вообщем-то процесс распаковки тоже в методе объяснен - скорее всего коды отличаются началом, так что никакой другой код не начинается с 00 и 010. Поэтому 00010 однозначно раскодируются как 'аб'. Думаю, в интернете полно реализаций. Навскидку могу предложить промежуточный класс, извлекающий по биту последовательно, и обработчик, который добавляет к текущему коду отданные биты и проверяет по таблице - не является ли это кодом некоего символа.
 
T

Tatarin

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

grigsoft

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