Полубайтово пакетиране

Да разгледаме представянето на цифрите от 0 до 9 в кодова таблца ASCII. На 0 съответства 30 (в шестнайсетична бройна система), а на 9 – съответно 39. Разписваме двоичните стойности съгласно тази информация и получаваме:

Цифра
Двоично
0
0011 0000
1
0011 0001
2
0011 0010
3
0011 0011
4
0011 0100
5

0011 0101

6
0011 0110
7
0011 0111
8

0011 1000

9
0011 1001

Забелязваме, че във всяко едно от представянията имаме 0011 в старшите 4 бита. Очевидно, това е излишна информация, на базата на чието отстраняване може да се извърши компресия.

Полубайтово пакетиране

Идеята на полубайтовото пакетиране е използвайки такива повторения в кодовите таблици да събира по две цифри в 1 байт.

Пример

Числото 45, което стандартно се записва в 2 байта ( 0011 0100 0011 0101 ) можем да запишем в един като 0100 0101, премахвайки излишната информация от старшите битове.

Ако входното съобщение съдържа само цифри, коефициентът на компресия е около 2. Тъй като такива съобщения не се срещат толкова често в практиката, обикновено при смесени такива се пакетират само цифрите, а останалата част се предава в некодиран вид. За отделяне на пакетираните символи от останалите се използват т.н. “кодиращи групи”.

Кодиращата група (разделена на отделни байтове) изглежда така:

флаг
брояч
цифра 1
цифра 2
цифра 3
цифра 4
......
цифра n-1
цифра n

Където:

- флаг е специален символ указващ, че следва кодираща група;

- брояч показва колко байта кодирана информация следват

Минимиалната дължина на кодиращата група е 3 байта. Понякога, за да се спечели един допълнителен полубайт, кодиращата група използва полубайтов брояч. Тогава нейният формат добива вид:

флаг
брояч
цифра 2
цифра 3
цифра 4
......
цифра n-1
цифра n

В този случай минималната дължина на кодиращата група се редуцира до 2 байта, но това налага и допълнително ограничение в дължината на поредицата (понеже броячът може да указва по-малък брой последващи байтове с пакетирани цифри).

Когато се използва 1 байтов брояч, минималния брой цифри, които трябва да се пакетират, за да бъде кодирането ефективно е 6:

1
2
3
4
5
6
флаг
брояч
1
2
3
4
5
6
 

В този пример, печалбата е 1 байт. Очевидно е, че тя нараства с всеки допълнителен байт от входното съобщение, приближавайки постепенно коефицента на компресия за поредицата към 2.

 



SAM - Science At Manchev.org
science.manchev.org