Арифметическое кодирование информации. Арифметическое сжатие

Классический вариант алгоритма

Сжатие по методу Хаффмана постепенно вытесняется арифметическим сжатием. Свою роль в этом сыграло то, что закончились сроки действия па­тентов, ограничивающих использование арифметического сжатия. Кроме того, алгоритм Хаффмана приближает относительные частоты появления символов в потоке частотами, кратными степени двойки (например, для символов а, Ъ, с, d с вероятностями 1/2, 1/4, 1/8, 1/8 будут использованы ко­ды О, 10, 110, 111), а арифметическое сжатие дает лучшую степень прибли­жения частоты. По теореме Шеннона наилучшее сжатие в двоичной ариф­метике мы получим, если будем кодировать символ с относительной часто­той f с помощью -log 2 (f) бит.

0.3 0,4 0.5 0.6 0.7

Относительная частота символа

"^~" Оптимальное сжатие
---- Метод Хаффмана

Рис. 1.1. График сравнения оптимального кодирования и кодирования по методу Хаффмана

На графике выше приводится сравнение оптимального кодирования и кодирования по методу Хаффмана. Хорошо видно, что в ситуации, когда относительные частоты не являются степенями двойки, сжатие становится менее эффективным (мы тратим больше битов, чем это необходимо). На­пример, если у нас два символа а и Ь с вероятностями 253/256 и 3/256, то в идеале мы должны потратить на цепочку из 256 байт -log 2 (253/256)-253-bg 2 (3/256)-3 = 23.546, т. е. 24 бита. При кодировании по Хаффману мы за­кодируем а и Ъ как 0 и 1 и нам придется потратить 1 -253+1 -3=256 бит, т. е. в 10 раз больше. Рассмотрим алгоритм, дающий результат, близкий к опти­мальному.

Арифметическое сжатие - достаточно изящный метод, в основе которого лежит очень простая идея. Мы представляем кодируемый текст в виде дро­би, при этом строим дробь таким образом, чтобы наш текст был представ­лен как можно компактнее. Для примера рассмотрим построение такой дро­би на интервале ; Ь[с]), а интервал для /-го кодируемого символа потока как ; Ь[с]), включающий 0.341. Перебором всех возможных символов по приведенной выше таблице находим, что только интервал -(fti-j - li-i); hi = li.! + b ■ {hi.! - li.i); if {{l t <= value) && (value < hi)) break; }; DataFile.WriteSymbol(c^) ;

где value - прочитанное из потока число (дробь), а с - записываемые в вы­ходной поток распаковываемые символы. При использовании алфавита из 256 символов Cj внутренний цикл выполняется достаточно долго, однако его можно ускорить. Заметим, что поскольку Ь[с^ {\=a; II delitel=10

First_qtr - (h 0 +l)/4; // - 16384

Half = First_qtr*2; // - 32768

Third_qtr - First_qtr*3;// = 49152

bits_to_follow =0; // Сколько битов сбрасывать

while (not DataFile.EOFO) {

с = DataFile.ReadSymbol(); // Читаем символ
j = IndexForSymbol(с); i++; // Находим его индекс
li = li.j + b*{h i . 1 - li-x + l)/delitel;
hi = li.! + b ;
First_qtr = (h 0 +l)/4; // = 16384

Half = First_qtr*2; // = 32768

Third_qtr = First_qtr*3; // = 49152

value=CompressedFile.Readl6Bit();

for(i=l; i< CompressedFile.DataLengthO; i++){

freq=((value-2 i . 1 +l)*delitel-l)/(h i . I - 1 ± . х + 1) ;

for(j=l; b<=freq; j++); // Поиск символа

li = 1ы + blj-l]*{bi.! - li- u + l)/delitel;

hi = Im + b*{h i . 1 - li.! + l)/delitel - 1;

for(;;) { // Обрабатываем варианты

if (hi < Half) // переполнения

; // Ничего else ifdi >= Half) {

2i-= Half; hi-= Half; value-= Half; }

else if (di >= First_qtr)&& (hi < Third_qtr)) { 2i-= First_qtr; hi-= First_qtr; value-= First_qtr,-} else break; 2i+=2 i; hi+= hi+1;

value+=value+CompressedFile.ReadBit(); } DataFile.WriteSymbol(c););

Упражнение. Предложите примеры последовательностей, сжимаемых алго­ритмом с максимальным и минимальным коэффициентом.

Как видно, с неточностями арифметики мы боремся, выполняя отдель­ные операции над /, и А, синхронно в компрессоре и декомпрессоре.

Незначительные потери точности (доли процента при достаточно боль­шом файле) и, соответственно, уменьшение степени сжатия по сравнению с идеальным алгоритмом происходят во время операции деления, при округ­лении относительных частот до целого, при записи последних битов в файл. Алгоритм можно ускорить, если представлять относительные частоты так, чтобы делитель был степенью двойки (т. е. заменить деление операцией по­битового сдвига).

Для того чтобы оценить степень сжатия арифметическим алгоритмом конкретной строки, нужно найти минимальное число N, такое, чтобы длина рабочего интервала при сжатии последнего символа цепочки была бы меньше 1/2^.. Этот критерий означает, что внутри нашего интервала заведо­мо найдется хотя бы одно число, в двоичном представлении которого после N-ro знака будут только 0. Длину же интервала, дорчитать просто, поскольку она равна произведению вероятностей всех символов.

Рассмотрим приводившийся ранее пример строки из двух символов л и Ъ с вероятностями 253/256 и 3/256. Длина последнего рабочего интервала для цепочки из 256 символов а и Ь с указанными вероятностями равн. Легко подсчитать, что искомое N=24 (1/2 24 = 5.96-10" 8), поскольку 23 дает слишком большой интервал (в 2 раза шире), а 25 не является минимальным числом, удовлетворяющим критерию. Выше было показано, что алгоритм Хаффмана кодирует данную цепочку в 256 бит. То есть для рассмотренного примера арифметический алгоритм дает десятикратное преимущество, пе­ред алгоритмом Хаффмана и требует менее 0.1 бита на символ.

Упражнение. Подсчитайте оценку степени сжатия для строки "КОВ.КОРОБА".

Следует сказать пару слов об адаптивном алгоритме арифметического сжатия. Его идея заключается в том, чтобы перестраивать таблицу вероят­ностей b[f] по ходу упаковки и распаковки непосредственно при получении очередного символа. Такой алгоритм не требует сохранения значений веро­ятностей символов в выходной файл и, как правило, дает большую степень сжатия. Так, например, файл вида а 1000 £ 1000 с 1000 б/ 1000 (где степень означает число повторов данного символа) адаптивный алгоритм сможет сжать, эф­фективнее, чем потратив 2 бита на символ. Приведенный выше алгоритм достаточно просто превращается в адаптивный. Ранее мы сохраняли табли­цу диапазонов в файл, а теперь мы считаем прямо по ходу работы компрес­сора и декомпрессора, пересчитываем относительные частоты, корректируя в соответствии с ними таблицу диапазонов. Важно, чтобы изменения в таб­лице происходили в компрессоре и декомпрессоре синхронно, т. е., напри­мер, после кодирования цепочки длины 100 таблица диапазонов должна быть точно такой же, как и после декодирования цепочки длины 100. Это условие легко выполнить, если изменять таблицу после кодирования и де­кодирования очередного символа. Подробнее об адаптивных алгоритмах смотрите в гл. 4.

Характеристики арифметического алгоритма:

Лучшая и худшая степень сжатия: лучшая > 8 (возможно кодирование менее бита на символ), худшая - 1.

Плюсы алгоритма: обеспечивает лучшую степень сжатия, чем алго-I ритм Хаффмана (на типичных данных на 1-10%).

Характерные особенности: так же как кодирование по Хаффману, не увеличивает размера исходных данных в худшем случае.

Интервальное кодирование

В отличие от классического алгоритма, интервальное кодирование пред­полагает, что мы имеем дело с целыми дискретными величинами, которые могут принимать ограниченное число значений. Как уже было отмечено, начальный интервал в целочисленной арифметике записывается в виде [ОД) или , где N- число возможных значений переменной, используемой для хранения границ интервала.

Чтобы наиболее эффективно сжать данные, мы должны закодировать каждый символ s посредством -log 2 (Ј) бит, где f, - частота символа s. Ко­нечно, на практике такая точность недостижима, но мы можем для каждого символа s отвести в интервале диапазон значений , Prev_freq[c], 10) ;

Результат

Нормализация

Нормализация

Нормализация

Как уже было отмечено, чаще всего при нормализации не происходит переноса. Исходя из этого, Дмитрий Субботин 1 предложил отказаться от переноса вовсе. Оказалось, что потери в сжатии совсем незначительны, по­рядка нескольких байтов. Впрочем, выигрыш по скорости тоже оказался не очень заметен. Главное достоинство такого подхода - в простоте и ком­пактности кода. Вот как выглядит функция нормализации для 32-разрядной арифметики:

♦define CODEBITS 24

♦define TOP (l«CODEBITS)

♦define BOTTOM (TOP»8)

♦define BIGBYTE (0xFF«(CODEBITS-8))

void encode_normalize(void) { while(range < BOTTOM) {

if(low & BIGBYTE == BIGBYTE &&

range + (low & BOTTOM-1) >= BOTTOM) range = BOTTOM - (low & BOTTOM-1); output_byte (low»24) ; range<<=8; low«=8; })

Можно заметить, что избежать переноса нам позволяет своевременное принудительное уменьшение значения размера интервала. Оно происходит

тогда, когда второй по старшинству байт low принимает значение OxFF, а при добавлении к low значения размера интервала range возникает пере­нос. Так выглядит оптимизированная процедура нормализации:

void encode_normalize(void) { while((low " low+range)} }

void decode_normalize(void) { while((low л low+range) }

Упражнение. Применить интервальное кодирование без переноса для строки "ков.корова".

Существует множество определœений семьи в социологии. Наиболее популярно понимание семьикак объединœения людей, основанного на кровном родстве, браке или усыновлении, которых связывает общность быта и (или) взаимная ответственность за воспитание детей. Семья включает в себя разнородные компоненты, связанные с физиологическими процессами, с психологией взаимоотношений, с нормами и ценностями культуры, с демографической динамикой, с экономическими условиями жизни, с государством,с политикой, с историей. По этой причине в социологии семья рассматривается как социальный институт, находящийся во взаимосвязи с другими институтами. С другой стороны, социология рассматривает семью как малую группу, как сравнительно автономную социальную систему со специфическими ценностями, установками, ролями. Следовательно, в социологии с её подходом изучения социального мира через взаимосвязь личного и общественного семья выступает в качестве посредника между индивидом и обществом.

Первоначальную основу семейных отношений составляет брак. Брак- это исторически меняющаяся форма отношений между мужчиной и женщиной, посредством которого общество упорядочивает и санкционирует их половую жизнь и устанавливает их супружеские права и обязанности. Можно сказать, что бракэтосовокупность норм, регулирующих отношения супругов друг к другу, их взаимные права и обязанности, а также их отношения к детям и совместному имуществу. Формы брака, используемые обществами, весьма разнообразны.

Иногда общество ограничивает выбор партнера в браке тем, что разрешает выбирать его только вне определœенной узкой группы. Эта форма брака принято называть экзогамией. В нашем обществе это ограничение применяется для избежания кровосмесительных связей. Так, правовые нормы запрещают нам жениться на сестрах, двоюродных сестрах и некоторых других близких родственниках. Во многих обществах запрещено выбирать супруга внутри своего клана, деревни, а иногда даже племени.

В обществах есть и противоположные требования, когда выбор партнера в браке возможен лишь в пределах своей группы. Такой вид брака принято называть эндогамией. В современных обществах широко распространена расовая эндогамия или эндогамия сословная. Эндогамия характерна для закрытых групп типа каст, где путем эндогамных браков поддерживается их закрытость.

По количеству партнеров в браке различают моногамию и полигамию. Моногамия, ᴛ.ᴇ. брак одного мужчины с одной женщиной (в одно время) наиболее привычный для современных европейских обществ. Но в развитии большинства обществ практиковалась полигамия ᴛ.ᴇ. формы брака, при которых существует более одного партнер в супружестве. Возможны три формы полигамии. В первую очередь, групповой брак, при котором несколько мужчин и несколько женщин находятся одновременно между собой в брачных отношениях. Очень редкой формой полигамного брака является полиандрия, когда женщина имеет несколько мужей. Наиболее распространенной формой полигамного брака является полигиния, или многоженство. Как отмечает С.С. Фролов, мнение представителœей современной Европы и Северной Америки о многоженстве в значительной степени этноцентрично. «Многие в нашем обществе, к примеру, считают, что культивирование такой формы брака ведет к деградации женщины, к превращению ее в рабыню. Это считается неслыханной жестокостью и вызывает возмущение (возможно, это чувство навеяно некоторыми фильмами о восточных владыках). При этом факты говорят об обратном. Трудно сказать, в каком обществе женщина имеет более высокий статус - в обществе с полигамной или моногамной формой брака. В первую очередь, даже в обществах, где широко распространена полигамная семья, браки обычно являются моногамными. Только наиболее преуспевающие люди с высоким статусом могут позволить себе иметь более одной жены. Во-вторых, обязанности между женами четко распределœены, а первая жена очень часто оказывает решающее влияние на поведение мужа. Жизнь всœех жен в достаточной степени обеспечена, и они, как правило, не желают для себя другой доли».

Кроме того по типу властных отношений различают патриархальный брак(власть у мужа), матриархальный брак (власть у жены) и эгалитарный брак (власть у обоих супругов). В современных европейских обществах преобладает эгалитарный брак.

К сожалению, брак не всœегда бывает успешным и для исправления ситуации в современных обществах предусмотрен развод. Но, в то же время, обществу невыгодна любая нестабильность института семьи. По этой причине практически в каждом обществе существуют определœенные правила и законы, затрудняющие развод или дающие привилегии одной из сторон. Большинство обществ стремится сделать развод весьма болезненной операцией. Особенно это касается тех обществ, где партнер по браку выбирается родителями. Очень часто в тех обществах, где большое значение имеет родственная семья, воспитание ребенка в случае развода частично берут на себя братья, сестры, дяди или тети. Как отмечает С.С. Фролов, «в нашем обществе с сильным акцентом на индивидуальную любовь при выборе партнера и при ярко выраженном приоритете нуклеарной семьи развод чаще всœего влечет за собой трагические последствия как для детей, так и для взрослых».

Как социальный институт семья выполняет следующие функции в обществе

Функция сексуального регулирования состоит в том, что общество упорядочивает, направляет и регулирует естественные сексуальные потребности людей. Вместе с тем практически каждое общество имеет альтернативные пути удовлетворения сексуальных потребностей. Несмотря на то, что существуют определœенные нормы супружеской верности, большинство обществ легко прощает нарушения этих норм.

Репродуктивная функция состоит в воспроизводстве новых поколений членов общества. При этом важно, чтобы дети были физически и психически здоровыми и впоследствии имели способности к обучению и социализации. Вместе с тем важным условием существования общества является регулирование рождаемости, избежание демографических спадов или, наоборот, взрывов. Семья - это основной институт, ответственный за воспроизводство новых членов общества. Другие пути неэффективны и, как правило, социально не одобряются. По этой причине появление ребенка вне института семьи обычно вызывает жалость, сострадание или осуждение.

Функция социализации состоит в том, что семья помогает ребенку усвоить нормы того общества, в котором он родился. Именно в семье закладываются основы формирования личности.С.С. Фролов отмечает, что «многие мыслители, начиная с Платона, говорили об обобществлении воспитания детей, однако всœе попытки социализации вне института семьи оказывались неудачными. К примеру, после революции в Советском Союзе были созданы специализированные программы общественного воспита-ния детей, с тем чтобы женщины могли участвовать в трудовом процессе. При этом данный эксперимент не получил широкого распространения. Сегодня в нашем обществе пытаются совместить усилия образовательных институтов и института семьи для успешной социализации детей, но семья по-прежнему удерживает первенство в социали-зации индивидов. В современном Израиле дети в кибуцах (кооперативных фермах) воспитываются в общих коттеджах и находятся под присмотром специальных воспитателœей, в то время как их матери выполняют различные работы в тех же кибуцах. Родители обычно проводят с детьми около двух часов в день и весь день в субботу. По мнению некоторых обозревателœей, такое воспитание проходит успешно, хотя у него существует много противников. Правда, так воспитывается лишь незначительное число детей Израиля. Эти редкие исключения, пожалуй, только подчеркивают первосте-пенное значение семьи для социализации детей. Семья для ребенка является первичной группой, именно с нее начинается развитие личности. Несмотря на появление позднее других первичных групп, у личности всœегда остаются привитые в раннем детстве основные образцы поведения. Главным способом семейной социализации является копирование детьми моделœей поведения взрослых членов семьи. Трудности социализации возникают в том случае, если ребенок ориентируется на неудачные образцы поведения родителœей, которые приходят в противоречие с тем, что ребенок видит в других семьях. При этом часто возникает неудовлетворенность действиями матери или отца, и ребенок начинает искать у других личностей, в других первичных группах приемлемые модели поведения».

Эмоциональная функция состоит в удовлетворении потребности человека в интимном общении. «Психиатры считают, что основной причиной эмоциональных и поведен-ческих трудностей в общении и даже физических болезней является отсутствие любви, тепла и полноценного интимного общения в первич-ной группе, и прежде всœего в семье. Огромное количество данных свидетельствует о том, что серьезные преступления и другие негативные отклонения намного чаще происходят у тех, кто в детстве был лишен заботы в семье, что дети, воспитанные в детских домах без любви матери и отца, гораздо в большей степени подвержены заболеваниям, психическим расстройствам, повышенной смертности, отклоня-ющемуся поведению. Доказано; что потребность людей в близком доверительном общении, интимности, эмоциональном выражении чувств близким людям является жизненно необходимым элементом существования. Благодаря своей структуре и качествам, семья служит самым важным источником эмоционального удовлетворения. Отношения родства и супружества предоставляют людям такую возможность».

Статусная функция состоит в том, что каждый человек, воспитанный в семье, получает в качестве наследия некоторые статусы, близкие к статусам членов его семьи. «Это прежде всœего относится к таким важным для личности статусам, как национальность, место в городской или сельской культуре и др. В классовых обществах принадлежность семьи к определœенному социальному слою предоставляет ребенку возможности и вознаграждения, характерные для этого слоя, и в подавляющем большинстве случаев определяют его дальнейшую жизнь. Конечно, классовый статус может изменяться благодаря усилиям человека и благоприятным обстоятельствам, но начало будущего нужно искать в семье этого человека. Семья обязательно должна осуществлять ролевую подготовку ребенка к статусам, близким к статусам его родителœей и родственников, прививая ему соответствующие интересы, ценности и образ жизни».

Защитная функция состоит в том, что семья призвана защитить человека от перегрузок, предоставляя ему возможность отдыха после трудового дня. Кроме того институт семьи осуществляет в разной степени физическую, экономическую и психологическую защиту своих членов. Обычно, задевая интересы и безопасность любой личности, мы задеваем и его семью, члены которой защищают своего близкого или мстят за него

Экономическая функция состоит в ведении членами семьи общего хозяйства, когда всœе они работают, как одна команда, способствует формированию крепких экономических связей между ними. Нормы семейной жизни включают обязательную помощь и поддержку каждого члена семьи в случае, если у него возникают экономические трудности.

Учитывая важность функций, которые призвана выполнять семья, государство птается создать условия для наиболее эффективного их выполнения. Такая деятельность принято называть семейной политикой государства.Государственная семейная политикасистема государственных мер по обеспечению социальной безопасности семьи, по созданию условий для реализации ее социально-значимых функций

Весьма разнообразны формы семьи как малой группы.

По этапам жизненного цикла различают молодую (до 10 лет семейного стажа) и зрелую семью.

По критерию социального статуса семьи бывают гомогенные (супруги из одной социальной страты-к примеру, студенческая семья) и гетерогенными (из разных классов, каст, слоёв), и по национально- этническому критерию - браки межнациональные или внутринациональные.

В современном урбанизированном обществе основным типом семьи стали нуклеарные семьи, состоящие из двух поколений- родители, дети. Нуклеарная семья принято называть репродуктивной (если в ней остались несовершеннолетние дети) или ориентационной (вышли взрослые дети и создали свои репродуктивные семьи). Репродуктивная семья классифицируется по наличию детей: детная, бездетная и семейный детский дом. В свою очередь детная семья бывает 1детной, 2хдетной и многодетной.Иногда нуклеарные семьи называют супружескими.Но нуклеарная семья может быть и без одного из супругов (неполная отцовская или неполная материнская семья). В неполной материнской семье различают семью одинокой матери (когда ребенок рожден вне брака), семью матери-одиночки (когда ребенок рожден в браке) и семью солдата срочной службы. Расширенная семья состоит из ряда супружеских пар (тесть-тёща, свёкор-свекровь, братья-сёстры, их супруги-дети). Это кровнородственные семьи. Полная расширенная семья - это когда никто из мужчин разных поколений не покидает пределы большой семьи. Такие семьи характерны для Китая.

Расширенная или родственная семья основывается не только на супружеских отношениях двух людей, но и на кровном родстве большого числа родственников. Значение нуклеарной и родственной семей для общества неодинаково. Так, хотя в нашем обществе существует родственная семья для семейных сборов, торжеств и других церемониальных целœей, важнейшие социальные функции выполняются нуклеарной семьей. Это выражается во многих элементах культуры, к примеру когда законы и нравственные нормы требуют, чтобы родители поддерживали своих детей, но ничего не говорят об обязанностях по отношению к братьям или сестрам, дядям или тетям.

В случае если нуклеарная семья имеет в основе супружескую пару, то основой родственной семьи являются братья и сестры в окружении их мужей, жен и детей. В большинстве родственных семей женатый мужчина (или замужняя женщина) в первую очередь остается привязанным к родительской семье и наполовину входит в семью жены (или мужа). Это имеет важные последствия. Человек в основном связан обязательствами и ответственностью с той семьей, в которой он родился, но не с той, с которой он связан узами брака. Так, женщина может не зависеть от своего мужа, но полностью быть в зависимости от своих братьев и сестер в делœе защиты и воспитания детей.

В расширенных семьях ответственность и забота распределяются среди достаточно большого числа членов семьи. Создается ситуация, когда ребенок тесно связан не только с родителями, но и со своими дядями и тетями. Он окружен взрослыми, которые в некоторых случаях готовы взять на себя обязанности родителœей. Τᴀᴋᴎᴍ ᴏϬᴩᴀᴈᴏᴍ, у ребенка в родственной семье появляется большая возможность для общения и социализации к большему числу ролей. Такая семья хорошо защищает ребенка от любых жизненных невзгод. В случае смерти матери или ухода ее из семьи ее роль в известной степени могут играть родственники.

В реальной жизни родственная семья далеко не всœегда возможна. Это связано, к примеру, с тем, что место рождения и место вступления в брак бывают значительно удалены друг от друга. Вместе с тем, родственники бывают фактически или социально отдалены от супружеской пары, и в этом случае семья остается в чистом виде нуклеарной. Современное общество характерно ослаблением многих родственных связей и, следовательно, преобладанием нуклеарной семьи над родственной.

Процесс формирования семьи как малой группы обусловлен ценностно-нормативными регуляторами (сексуальные стандарты поведения, нормы выбора брачного партнёра, отношения между родителями и детьми).На ранних стадиях общества отношения полов и поколений регулировались племенно-родовыми обычаями, базировались на религиозно-нравственных представлениях. С возникновением государства регулирование семейной жизни приобрело правовой характер.

Метод Хаффмана является простым, но эффективным только в том случае, когда вероятности появления символов равны числам , где - любое целое положительное число. Это связано с тем, что код Хаффмана присваивает каждому символу алфавита код с целым числом бит. Вместе с тем в теории информации известно, что, к примеру, при вероятности появления символа равной 0,4, ему в идеале следует поставить код длиной бит. Понятно, что при построении кодов Хаффмана нельзя задать длину кода в 1,32 бита͵ а только лишь в 1 или 2 бита͵ что приведет в результате к ухудшению сжатия данных. Арифметическое кодирование решает эту проблему путем присвоения кода всœему, обычно, большому передаваемому файлу вместо кодирования отдельных символов.

Идею арифметического кодирования лучше всœего рассмотреть на простом примере. Предположим, что крайне важно закодировать три символа входного потока, для определœенности - ϶ᴛᴏ строка SWISS_MISS с заданными частотами появления символов: S – 0,5, W – 0,1, I – 0,2, M – 0,1 и _ - 0,1. В арифметическом кодере каждый символ представляется интервалом в диапазоне чисел

111

(26/27; 1 ] " 31/32 ®

110

(8/9; 26/27 ] " 15/16 ®

10

(2/3; 8/9 ]

101

(22/27; 8/9 ] " 7/8 ®

100

(2/3; 22/27 ] " 3/4 ®

0

(0 ; 2/3 ]

01

(4/9; 2/3 ]

101

(16/27; 2/3 ] " 5/8 ®

100

(4/9; 16/27 ] " 1/2 ®

00

(0; 4/9 ]

001

(8/27; 4/9 ] " 3/8 ®

000

(0; 8/27 ] " 1/4 ®

Средняя длина кода на единицу сообщения

Приведем процедуру арифметического кодирования для последовательности произвольной длины:

While there are still input symbols do

get an input symbol

code_range = high - low.

high = low + code_range*high_range(symbol)

low = low + code_range*low_range(symbol)

Декодеру , как и кодеру, известна таблица распределения отрезков, выделенных символам алфавита источника. Декодирование арифметического кода сообщения происходит по следующему алгоритму:

Шаг 1 По таблице отрезков символов алфавита определяется интервал, содержащий текущий код сообщения – и по этому интервалу из той же таблицы однозначно определяется символ исходного сообщения. Если это маркер конца сообщения, то конец, иначе – переход к шагу 2 .

Шаг 2 Из текущего кода вычитается нижняя граница содержащего его интервала. Полученная разность делится на длину этого интервала. Полученное значение считается новым текущим кодом. Переход к шагу 1 .

Рассмотрим пример декодирования сообщения, сжатого по алгоритму арифметического кодирования.

Пример 3 Длина исходного сообщения 10 символов. Двоичный арифметический кодсообщения 000101000001100001011111 2 =1316259 10 .

Вещественное число, принадлежащее интервалу, однозначно определяющему закодированное сообщение, . Это число и будет текущим кодом сообщения.

По исходной таблице значений д.с.в. и назначенных им интервалов (таблица 2.7 ) определяется отрезок, которому принадлежит это число, - }


© 2024, leally.ru - Твой гид в мире компьютера и интернета