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

Идею арифметического кодирования лучше всего рассмотреть на простом примере. Предположим, что необходимо закодировать три символа входного потока, для определенности – это строка SWISS_MISS с заданными частотами появления символов: S – 0,5, W – 0,1, I – 0,2, M – 0,1 и _ - 0,1. В арифметическом кодере каждый символ представляется интервалом в диапазоне чисел ), а интервал для /-го кодируемого символа потока как ; Ь[с]), включающий 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) }

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

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

Интернет (Сеть, Internet) — виртуальная среда, гарантирующая доступ к информационным ресурсам, элементами которой выступают персональные компьютеры. Они объединены в единую схему и наделены неповторимыми признаками адресации, использующие высокоскоростные линии связи с главными компьютерами.

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

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

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

Онлайн среда обладает еще одним важным свойством – безграничными возможностями хранения информации. Через Internet передается личный опыт, кроме того, это – уникальная площадка информирования масс для современных СМИ и колоссальное хранилище мировых знаний.

Что представляет собой Интернет?

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

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

К примеру, после ввода в строку браузера имени «novichkam.info» через считанные мгновения клиент оказывается на веб-площадке, предлагающей помощь новичкам. В техническом плане, программный робот просто находит код IP-адреса, который присвоен конкретному сайту.

Машинный алгоритм, включает следующие операции:

  1. запрос фиксируется главным сервером, где хранится имя нужного тематического массива данных;
  2. происходит нахождение в памяти имени данного ресурса, т.е. обнаружение необходимого IP-адреса;
  3. клиент попадает на web-сайт.

Существуют и другие протоколы, например HTTP. Запросы в иной способ осуществляются с добавлением префикса http://

Что такое всемирная паутина (WWW)

Для большинства представителей целевой аудитории большой интерес представляет определение сервиса Интернета в качестве Всемирной паутины (World Wide Web) в сокращении (WWW или просто WEB). Под ее определением понимается совокупность взаимосвязанных веб страниц, доступ к которым предоставляют ограниченное количество ПК, подключенных к Сети.

Набор текстовых файлов, размеченных на языке HTML с переходами по ссылкам, размещенный на электронной площадке, получил название web-сайта. Ознакомиться с контентом того или иного веб-сайта можно, активизировав работу браузера по поиску адресного имени.

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

Система адресации

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

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

В адресе любого сайта главное – домен, который служит для простоты запоминания. Домен, как правило, отображает адрес главной страницы. Вместе с тем, следует понимать, что для технического скачивания страницы, компьютерное устройство использует IP с протоколом «12.123.45.5» . Согласитесь, эту комбинацию намного сложнее запомнить, чем доменное имя нашего сайта .

Важно знать, что ввод «http://» или префикса «WWW» в поисковой строке вовсе НЕ обязателен. Лучше воспользоваться услугами поисковой системы, где допущенная ошибка будет немедленно подкорректирована, а ввод домена возможен без зоны, вызывающей путаницу.

Что нам дает интернет?

  • неограниченного общения и коммуникации

Многие ищут здесь единомышленников, общаясь на популярных социальных проектах и форумах. Другим нравится уникальный сервис личного общения при помощи ICQ или Skype. Посетители website знакомств рассчитывают найти здесь свою вторую половину;

  • безграничные возможности развлечений и организации личного досуга

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

  • самообразование

В среде массовой коммуникации можно не только читать полезные статьи, но и участвовать в тренингах, мастер-классах, просматривать видео-уроки;

  • творческое развитие личности

Здесь можно повстречаться с редкими людьми, посещать их профессиональные проекты для творческого и личностного совершенствования;

  • покупка товаров и услуг

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

  • новые способы заработка

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

  • многое другое. Информация на нашем сайте поможет вам узнать не просто все возможности этой глобальной сети, но и отлично , находясь в ней.