2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Простой архиватор
Сообщение14.10.2010, 20:04 


11/09/10
13
Задача
Реализовать архиватор файлов, состоящих только из строчных латинских букв('a'-'z')
..........
..........

Последовательность из n одинаковых символов(байтов) заменяется на один байт, содержащий два значения: n и код строчной латинской буквы. Учесть ограничение на длину последовательности повторяющихся букв - 32 шт. ...........

У меня проблема: как уместить два числа в одном байте? Ведь $2<=n<=32$.

 Профиль  
                  
 
 Re: Простой архиватор
Сообщение14.10.2010, 20:09 
Заслуженный участник


04/05/09
4593
Никак. Скорее всего, в задании ошибка. Ваша задача - определить реальный предел длины последовательности, которую можно закодировать.
Может быть, конечно, что байт у Вас не 8-ми битовый, но это уж слишком маловероятно.

 Профиль  
                  
 
 Re: Простой архиватор
Сообщение15.10.2010, 07:03 


16/06/10
199
Вариант для меньшего ограничения на длину последовательности (5 символов).
Т.к. словарь состоит из 26 символов, можно использовать не коды ASCII, а последовательный номер ('a'->0, 'b'->1, ..., 'z'->25) и следующую схему кодирования:
Код:
fnnccccc
f = 0/1 (признак - код ASCII/закодированная последовательность);
nn = Длина_Последовательности-2;
ccccc = Номер_Символа.

0x80 -> "aa"
0xf9 -> "zzzzz"

 Профиль  
                  
 
 
Сообщение15.10.2010, 13:35 
Заслуженный участник


11/05/08
32166
lim0n в сообщении #362187 писал(а):
Вариант для меньшего ограничения на длину последовательности (5 символов).

Только почему 5-то, когда 8?... (флажок вреден, тут вам не там, тут не *.PCX)

 Профиль  
                  
 
 Re: Простой архиватор
Сообщение15.10.2010, 13:59 


04/02/08
325
Буково
А в чем проблема-то? Маленьких латинских букв всего лишь 26 < 32 - имеем 4, к примеру, младших, бита. Оставшиеся 4, к примеру, старших бита - количество символов в последовательности + 1 (т.к. бессмыссленно кодировать 0 символов). Т.е. максимальное кол-во повторяющихся символов, закодированных одним байтом у вас будет равно 32.

Т.е. если c - код данного символа, N - кол-во повторов, cc - код, получим:
Код:
cc = ((N-1)<<4) | (c - 'a');

 Профиль  
                  
 
 Re: Простой архиватор
Сообщение15.10.2010, 14:21 


16/06/10
199
ewert в сообщении #362256 писал(а):
флажок вреден, тут вам не там, тут не *.PCX)
Как в упакованном тексте различить просто символ с кодом ASCII и байт, кодирующий последовательность одинаковых символов?

Ed_Em в сообщении #362268 писал(а):
Маленьких латинских букв всего лишь 26 < 32 - имеем 4, к примеру, младших, бита.
Да, но $26>16$, так что 4 бита не хватит.

 Профиль  
                  
 
 Re: Простой архиватор
Сообщение15.10.2010, 14:34 
Заслуженный участник


11/05/08
32166
lim0n в сообщении #362283 писал(а):
Как в упакованном тексте различить просто символ с кодом ASCII и байт, кодирующий последовательность одинаковых символов?

Что значит "как"? Когда часть битов заранее отведена под длину. Просто кодируем отдельный символ как цепочку единичной длины -- и всё тут.

В формате *.PCX -- совсем другая история, там кодировать приходится все символы, а не только 26 избранных, поэтому без флажков, конечно, и не обойтись. Но это -- там.

 Профиль  
                  
 
 Re: Простой архиватор
Сообщение15.10.2010, 14:42 


16/06/10
199
ewert в сообщении #362287 писал(а):
Просто кодируем отдельный символ как цепочку единичной длины -- и всё тут.
Т.е.
Код:
0x0 -> "a"
0x20 -> "aa"
...
0xe0 -> "aaaaaaaa"
Похоже на то... :-)

 Профиль  
                  
 
 Re: Простой архиватор
Сообщение15.10.2010, 14:56 


04/02/08
325
Буково
Ed_Em в сообщении #362268 писал(а):
Маленьких латинских букв всего лишь 26 < 32 - имеем 4, к примеру, младших, бита.
Да, но $26>16$, так что 4 бита не хватит.[/quote]
Тьфу ты, извиняюсь, обсчитался...
Мда. Тогда ограничиваемся маскимальной длиной в 8 символов... Либо используем флаги, и более длинные последовательности кодируем двумя байтами.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group