Основные идеи адаптированного словарного кодирования методом Зива-Лемпела

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

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

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

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

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

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

Литература: 1.Мельников Н.В. Проблемы топлива и энергетики // Наука и жизнь. 1966. №3. С. 11-12. 2. Евдокимов А.Г., Коринько И.В.,Кузнецов В.М., Самой-ленко Н.И. Рациональная эксплуатация и развитие систем водоснабжения и водоотведения. Т.1.Компью-теризация в системах водоснабжения.Учебн.пособие/ Под ред. А. Г. Евдокимова и Н.И.Самойленко. Харьков: ХТУРЭ,1997. 276с. 3. Евдокимов А.Г., Коринько И.В., Кузнецов В.М., Самойленко Н.И. Рациональная эксплуатация и развитие систем водоснабжения и водоотведения. Т. 2. Автоматизация процессов водоотведения: Учебн. пособие / Под ред. АГ.Евдокимова и Н.И.Са-мойленко.Харьков: хТуРЭ, 1998. 342с.

Поступила в редколлегию 16.02.2000

Рецензент: д-р. техн. наук, проф. Невлюдов И.Ш.

Григорьев Александр Викторович, канд техн. наук, доцент, докторант кафедры ПМ и ВТ ХДАМГ. Научные интересы: разработка методов контроля и управления объектами различного назначения. Адрес: Украина, Харьков, пер.Спартаковский, 3, кв.8. тел.76-33-29.

УДК 681.518

ОСНОВНЫЕ ИДЕИ АДАПТИРОВАННОГО СЛОВАРНОГО КОДИРОВАНИЯ МЕТОДОМ ЗИВА-ЛЕМПЕЛА

ЖУРАВКА А.В, ЛИТВИНЕНКО Е.Н.__________

Представляются результаты исследования основной идеи адаптированного словарного кодирования методом Зива-Лемпела. Дается хронологический и сравнительный анализ усовершенствованных реализаций метода.

1. Введение

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

Решаемые задачи. На примере метода Зива-Лемпела ознакомиться с идеей обратимого сжатия тексто-

вой информации и последовательности дискретных данных. Раскрыть основную идею словарного метода Зива-Лемпела и его существуещих модернизаций.

Обратимое сжатие или сжатие без наличия помех.

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

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

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

142

РИ, 2000, № 2

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

Существуют два основных способа проведения сжатия: статистический и словарный. Лучшие статистические методы применяют арифметическое кодирование, лучшие словарные — метод Зива-Лемпела. В словарных методах группы последовательных символов или “фраз” заменяются кодом. Замененная фраза может быть найдена в некотором “словаре”.

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

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

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

Адаптированные и неадаптированные модели. В

порядке функционального соответствия декодировщик должен иметь доступ к той же модели, что и кодировщик. Для достижения этого есть три способа моделирования: статичное, полуадаптированное и адаптированное.

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

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

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

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

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

Важно, чтобы значения вероятностей, присваемых моделью, не были равны 0, так как если символы кодируются -log р битами, то при близости вероятности к 0 длина кода стремится к бесконечности. Нулевая вероятность имеет место, если в образце текста символ не встретился ни разу—частая ситуация для адаптированных моделей на начальной стадии сжатия. Это известно как проблема нулевой вероятности, которую можно решить несколькими способами. Один из них состоит в том, чтобы добавлять 1 к счетчику каждого символа. Альтернативные подходы основаны на идее выделения одного счетчика для всех новых (с нулевой частотой) символов, для последующего использования его значения.

РИ, 2000, № 2

143

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

2. Описание метода и его усовершенствованных реализаций

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

Раскодирование сжатого текста осуществляется напрямую — происходит простая замена указателя готовой фразой из словаря, на которую тот указывает. Одной из форм такого указателя есть пара (m,l), которая заменяет фразу из l символа, начинающуюся со смещения m во входном потоке. Например, указатель (7,2) адресует 7-й и 8-й символы исходной строки. Используя это обозначение, строка “abbaabbbabab” будет закодирована как “abba(1,3)(3,2)(8,3)”. Заметим, что несмотря на рекурсию в последнем указателе, производимое кодирование не будет двусмысленным.

Распространено неверное представление, что за понятием LZ-метода стоит единственный алгоритм. Первоначально это был вариант для измерения “сложности” строки, приведший к двум разным алгоритмам сжатия. Эти первые статьи были глубоко теоретическими и лишь последующие переложения других авторов дали более доступное представление. Эти толкования содержат в себе много новшеств, создающих туманное представление о том, что такое LZ-сжатие на самом деле. Из-за большого числа вариантов этого метода лучшее описание можно осуществить только через его растущую семью, где каждый член отражает свое решение разработчика. Эти версии отличаются друг от друга в двух главных факторах: есть ли предел обратного хода указателя, и на какие подстроки из этого множества он может ссылаться. Продвижение указателя в ранее просмотренную часть текста может быть неограниченным (расширяющееся окно) или ограничено окном постоянного размера из N предшествующих символов, где N обычно составляет несколько тысяч. Выбранные подстроки также могут быть неограниченным или ограниченным множеством фраз, выбранных согласно некоторому замыслу.

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

Но по мере роста окна кодировщик может замедлить свою работу из-за возрастания времени поиска соответствующих подстрок, а сжатие может ухуд-

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

Мы отметили самые главные варианты LZ-метода, которые ниже будут рассмотрены более подробно. Все они произошли от одного из двух разных подходов, описанных Зивом и Лемпелом [1-3,5-7] и помеченных соответственно как LZ77 и LZ78. Эти два подхода совсем различны, хотя некоторые авторы вносят путаницу утверждениями об их идентичности. Термин “LZ-схемы” происходит от имен их изобретателей. Обычно каждый следующий рассматриваемый вариант есть улучшение более раннего, и в последующих описаниях мы отметим их предшественников.

LZ77. Это первая опубликованная версия LZ-метода. В ней указатели обозначают фразы в окне постоянного размера, предшествующие позиции кода. Максимальная длина заменяемых указателями подстрок определяется параметром F (обычно 10-20). Эти ограничения позволяют LZ77 использовать “скользящее окно”из N символов. Из них первые N-F были уже закодированы, а последние F составляют упреждающий буфер.

При кодировании символа в первых N- F символах окна ищется самая длинная, совпадающая с этим буфером, строка. Она может частично перекрывать буфер, но не может быть самим буфером.

Найденное наибольшее соответствие затем кодируется триадой <i,j,a>, где i есть его смещение от начала буфера, j - длина соответствия, a — первый символ, не соответствующий подстроке окна. Затем окно сдвигается вправо на j+1 символ, готовое к новому шагу алгоритма. Привязка определенного символа к каждому указателю гарантирует, что кодирование будет выполнятся даже в том случае, если для первого символа упреждающего буфера не будет найдено соответствия.

Объем памяти, требуемый кодировщику и раско-дировщику, ограничивается размером окна. Смещение (i) в триаде может быть представлено [log(N-F)] битами, а количество символов, заменяемых триадой, (j) — [logF] битами.

Раскодирование осуществляется очень просто и быстро. При этом поддерживается тот же порядок работы с окном, что и при кодировании, но в отличие от поиска одинаковых строк он, наоборот, копирует их из окна в соответствии с очередной триадой. На относительно дешевой аппаратуре при раскодировании была достигнута скорость в 10 Мб/с.

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

144

РИ, 2000, № 2

LZ77 словарь и текст - это одно и то же. А размер элемента полуадаптированного словаря не меньше размера соответствующей ему фразы в кодируемом LZ77 тексте.

Каждый шаг кодирования LZ77 требует одинакового количества времени, что является его главным недостатком в случае, если оно будет большим. Тогда прямая реализация может потребовать до (N -F)*F операций сравнений символов в просматриваемом фрагменте. Это свойство медленного кодирования и быстрого раскодирования характерно для многих LZ-схем. Скорость кодирования может быть увеличена за счет использования таких СД, как двоичные деревья, деревья цифрового поиска или хэш-таблицы, но объем требуемой памяти при этом также возрастет. Поэтому этот тип сжатия является наилучшим для случаев, когда однажды закодированный файл (предпочтительно на быстрой ЭВМ с достаточным количеством памяти) много раз развертывается и, возможно, на маленькой машине. Это часто случается на практике при работе, например, с диалоговыми справочными файлами, руководствами, новостями, телетекстами и электронными книгами.

LZR. Подобен LZ77, за исключением того, что он позволяет указателям в уже просмотренной части текста адресовать любую позицию. Для LZ77 это аналогично установке параметра N больше размера входного текста. Поскольку i и j в триаде <i,j,a> могут возрастать на произвольно большое значение, они представляются целыми кодами переменной длины. Этот метод использован Элиасом и помечен как C(w’). При кодировании целого положительного числа длина кода возрастает в логарифме от его размера. Например, коды для чисел 1,8 и 16 соответственно будут равны 0010,10010000 и 101100000.

Из-за отсутствия ограничения на рост словаря, LZR не очень применим на практике, поскольку при этом процессу кодирования требуется все больше памяти для размещения текста, в котором ищутся соответствия. При использовании линейного поиска n-символьный текст будет закодирован за время O(nA2). В описана СД, позволяющая производить кодирование за время O(n) с используемым объемом памяти в O(n), но другие LZ-схемы достигают аналогичного сжатия при значительно меньших по сравнению с LZR затратах.

LZSS. Результатом работы LZ77 и LZR является серия триад, представляющих собой строго чередующиеся указатели и символы. Использование явного символа вслед за каждым указателем является на практике расточительным, так как часто его можно сделать частью следующего указателя. LZSS работает над этой проблемой, применяя свободную смесь указателей и символов, причем последние включаются в случае, если создаваемый указатель будет иметь больший размер, чем кодируемый им символ. Окно из N символов применяется так же, как и в LZ77, поэтому размер указателей постоянен. К каждому указателю или символу добавляется дополнительный бит для различия их между собой, а для устранения неиспользуемых битов вывод пакуется LZSS.

LZB. Независимо от длины адресуемой им фразы, каждый указатель в LZSS имеет постоянный размер. На практике фразы с одной длиной встречаются гораздо чаще других, поэтому с указателями разной длины может быть достигнуто лучшее сжатие. LZB явился результатом экспериментов по оценке различных методов кодирования указателей, тоже как явных символов и различающих их флагов. Метод дает гораздо лучшее, чем LZSS, сжатие и имеет дополнительное достоинство в меньшей чувствительности к выбору параметров. Первой составляющей указателя есть позиция начала фразы от начала окна. LZB работает относительно этой компоненты. Первоначально, когда символов в окне 2, размер равен 1 биту, потом, при 4-х символах в окне, возрастает до 2 битов, и т.д., пока окно не станет содержать N символов. Для кодирования второй составляющей (длины фразы) указателя LZB применяет схему кодов переменной длины Элиаса - C (gamma). Поскольку этот код может представлять фразу любой длины, то никаких ограничений на нее не накладывается.

LZH. Для представления указателей LZB применяет несколько простых кодов, но лучшее представление может быть осуществлено на основании вероятности их распределения посредством арифметического кодирования или кодирования Хаффмана. LZH-система подобна LZSS, но применяет для указателей и символов кодированиеХаффмана. При применении одного из этих статистических кодировщиков к LZ-указателям, из-за расходов по передаче большого количества кодов (даже в адаптированном режиме) оказалось трудно улучшить сжатие. Кроме того, итоговой схеме не хватает быстроты и простоты LZ-метода.

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

Например, строка “aaabbabaabaaabab”, как показано в таблице, делится на 7 фраз. Каждая из них кодируется как уже встречавшаяся ранее фраза плюс текущий символ. Например, последние три символа кодируются как фраза номер 4 (“ba”), за которой следует символ “b”. Фраза номер 0 - пустая строка.

Ввод a aa b ba baa baaa bab

Номер фразы 1 2 3 4 5 6 7

Вывод

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

РИ, 2000, № 2

145

ляется [log p] битами. На практике словарь не может продолжать расти бесконечно. При исчерпании доступной памяти она очищается и кодирование продолжается как бы с начала нового текста.

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

Важным теоретическим свойством LZ78 является то, что при прозводстве исходного текста стационарным эргод ическим источником сжатие является приблизительно оптимальным по мере возрастания ввода. Это значит, что LZ78 приведет бесконечно длинную строку к минимальному размеру, определяемому энтропией источника. Лишь немногие методы сжатия обладают этим свойством. Источник являеся эргодическим, если любая производимая им последовательность все точнее характеризует его по мере возрастания своей длины. Поскольку это довольно слабое ограничение, то может показаться, что LZ78 есть решение проблемы сжатия текстов. Однако оптимальность появляется, когда размер ввода стремится к бесконечности, а большинство текстов значительно короче! Она основана на размере явного символа, который значительно меньше размера всего кода фразы. Так как его длина 8 битов, он будет занимать всего 20% вывода при создании 2Л40 фраз. Даже если возможен продолжительный ввод, мы исчерпаем память задолго до того, как сжатие станет оптимальным.

Реальная задача — посмотреть, как быстро LZ78 сходится к этому пределу. Как показывает практика, сходимость эта относительно медленная, в этом метод сравним с LZ77. Причина большой популярности LZ-техники на практике не в ее приближении к оптимальности, а по более прозаической причине — некоторые варианты позволяют осуществлять высокоэффективную реализацию.

LZW. Переход от LZ7 8 к LZW параллелен переходу от LZ77 к LZSS. Включение явного символа в вывод после каждой фразы часто является расточительным. LZW управляет повсеместным исключением этих символов, поэтому вывод содержит только указатели. Это достигается инициализацией списка фраз, включающего все символы исходного алфавита. Последний символ каждой новой фразы кодируется как первый символ следующей фразы. Особого внимания требует ситуация, возникающая при раскодировании, если фраза кодировалась с помощью другой, непосредственно ей предшествующей, но это не является непреодолимой проблемой.

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

них постоянного размера в (как правило) 12 битов. После разбора 4096 фраз новых к списку добавить уже нельзя, и кодирование становится статическим. Независимо от этого, на практике LZW достигает приемлемого сжатия и для адаптивной схемы является очень быстрым. Первый вариант Миллера и Вегмана из [4] является независимым изобретением LZW.

LZC. Схема, применяемая программой COMPRESS, используемой в системе UNIX. Она начиналась как реализация LZW, но затем несколько раз изменялась в целях достижения лучшего и более быстрого сжатия. Результатом явилась схема с высокими характеристиками, которая в настоящее время является одной из наиболее полезных.

Ранняя модификация работала с указателями переменной длины как в LZ78. Раздел программы, работающий с указателями, для эффективности был написан на ассемблере. Во избежание переполнения памяти словарем в качестве параметра должна передаваться максимальная длина указателя (обычно 16 битов, но для небольших машин меньше). Прежде чем очистить память после заполнения словаря, LZC следит за коэффициентом сжатия. Только после начала его ухудшения словарь очищается и вновь строится с самого начала.

LZT. Основан на LZC. Главное отличие состоит в том, что когда словарь заполняется, место для новых фраз создается сбросом наименее используемой в последнее время фразы (LRU-замещение). Это эффективно осуществляется поддержанием саморегулируемого списка фраз, организованного в виде хеш-таблицы. Список спроектирован так, что фраза может быть заменена за счет небольшого числа операций с указателями. Этот алгоритм немного медленнее LZC, но более продуманный выбор фраз в словаре обеспечивает достижения такого же коэффициента сжатия с меньшими затратами памяти.

LZT также кодирует номера фраз более эффективно, чем LZC посредством немного лучшего метода разбиения на фазы двоичного кодирования (его можно применить также и к некоторым другим LZ-методам). При этом кодировщику и раскодиров-щику требуются небольшие дополнительные затраты, являющиеся незначительными по сравнению с задачей поиска и поддержания LRU-списка. Второй вариант Миллера и Вегмана является независимым изобретением LZT.

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

146

РИ, 2000, № 2

один символ за раз, но для обеспечения эффективной реализации необходима продуманная СД.

LZJ. Представляет собой новый подход к LZ-сжатию, заслоняющий значительную брешь в строю его реализаций. Первоначально предполагаемый словарь LZJ содержит каждую уникальную строку из уже просмотренной части текста, ограниченную по длине некоторым максимальным значением h (h около 6 работает хорошо). Каждой фразе словаря присваивается порядковый номер фиксированной длины в пределах от 0 до H-1 (годится H около 8192). Для гарантии, что каждая строка будет закодирована, в словарь включается множество исходных символов. Когда словарь полон, он сокращается удалением строки, появлявшейся во входе только один раз.

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

LZFG. Предложенный Фиалой и Грини - это одни из наиболее практичных LZ-вариантов. Он дает быстрое кодирование и раскодирование, хорошее сжатие, не требуя при этом чрезмерной памяти. Он схож с LZJ в том, что потери от возможности кодирования одной и той же фразы двумя разными указателями устраняются хранением кодированного текста в виде дерева цифрового поиска и помещением в выходной файл позиции в дереве. Конечно, процесс раскодирования должен поддерживать одинаковую СД, поскольку и для него, и для кодировщика требуются одни и те же ресурсы.

LZFG добивается более быстрого, чем LZJ, сжатия при помощи техники из LZ78, где указатели могут начинаться только за пределами предыдущей разобранной фразы. Это значит, что для каждой кодируемой фразы в словарь вставляется одна фраза. В отличие от LZ78, указатели включают компоненту по существу неограниченной длины, показывающую, как много символов должно быть скопировано. Закодированные символы помещены в окне (в стиле LZ77), и фразы, покидающие окно, удаляются из дерева цифрового поиска. Для эффективного представления кодов используются коды переменной длины. Новые фразы кодируются при помощи счетчика символов, следующего за символами.

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

используемых для сжатия Зива-Лемпела, приводится у Белла [8].

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

Проблема поиска вполне поддается мультипроцессорной реализации, поскольку на самом деле существует N независимых строчных соответствий.

3. Заключение

Существуют 3 направления исследований в данной области: повышение эффективности сжатия, убыстрение работы алгоритма и осуществление сжатия на основании новой системы контекстов.

Сейчас лучшие схемы достигают сжатия в 2,3 - 2,5 битов/символ для английского текста. Показатель иногда может быть немного улучшен путем использования больших объемов памяти.

Одним направлением для исследований является подгонка схем сжатия к отечественным языкам. Сегодняшние системы работают полностью на лексическом уровне. Использование больших словарей с синтаксической и семантической информацией может позволить машинам получить преимущество от имеющейся в тексте высокоуровневой связности. Однако необходимо иметь в виду, что очень большое количество слов обычного английского текста в обычном английском словаре может быть не найдено. Например, Уолкер и Эмслер проверили 8 миллионов слов из New York Times News Service для Webster’s Seventh New Collegiate Dictionary и обнаружили, что в словаре отсутствовало почти 2/3 (64%) слов (они подсчитали, что около 1/4 из них — грамматические формы слов, еще 1/4—собственные существительные, 1/6 — слова, написанные через дефис, 1/12 — напечатаны с орфографическими ошибками, а оставшуюся четверть составляют возникшие уже после выпуска словаря неологизмы). Большинство словарей не содержат имен людей, названий мест, институтов, торговых марок и т.д., хотя они составляют основную часть почти всех документов. Поэтому специальные алгоритмы сжатия, взятые в расчете на лингвистическую информацию более высокого уровня, будут несомненно зависеть от системной сферы. Вероятно, что поиски методов улучшения характеристик сжатия в данном направлении будут объединяться с исследованиями в области контекстуального анализа по таким проблемам как извлечение ключевых слов и автоматическое абстрагирование.

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

РИ, 2000, № 2

147

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

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

Последняя область на будущее - это разработка и реализация новых систем, включающих сжатие текстов. Существует идея объединения в единую систему ряда распространенных программ разных областей применения, включая текст-процессор MaxWrite, цифровой факсимильный аппарат, сетевую почту и новости (например, UNIX “net-news”), а также архивацию файлов (например, программы ARC и PKARC для IBM PC, которые часто применяются для распределяемого ПО из электронных бюллетеней). Для увеличения скорости и сокращения стоимости большинство этих систем используют удивительно простые методы сжатия. Все они представляют собой потенциальные сферы применения для более сложных методов моделирования.

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

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

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

Литература: 1. Ziv J. and Lempel A. 1978. Compression of individual sequences via variable-rate coding. IEEETrans.Inf.Theory IT-24,5^рЕ). P.530-536. Describes a method of text compression that works by герНы^ a substring with a pointer to an earlier ocurrence of the same substring. Although it performs quite well, it does not provide a clear separation between modeling and coding. 2. Ziv J. and Lempel A. 1977. A universal algorithms for sequental data compression IEEE Trans.Inf.Theory IT-23,3,3 (May). P. 337-343. 3. Tischer P. 1987. A modified Lempel-Ziv-Welch data compression scheme. Aust. Comp. Sci. Commun. 9,1. P.262-272. 4. Miller V.S. and Wegman M.N. 1984. Variations on a theme by Ziv and Lempel. In Combinatorial Algorithms on Words.A.Apostolico and Z.Galil, Eds.NATO ASI Series, Vol.F12.Springer-Verlag, Berlin. P.131-140 Moffat A. 1987. Word based text compression. 5. Res.Rept.,Dept.of Computer Science, Univ.of Melbourne,Victoria, Australia. 6. Lempel A. and Ziv J. 1976.On the complexity of finite sequences. IEEE Trans.Inf. Theory IT-22,1(Jan.), 75-81. 7. Langdon G.G. 1983. A note on the Ziv-Lempel model for compressing individual sequences. 8. IEEE Trans. Inf. Theory IT-29, 2(Mar.). P. 284-287. Bell T.C. 1998. Longest match string searching for Ziv-Lempel compression. Res. Rept.6/89, Dept. of Computer Science, Univ. of Canterbury, New Zealand.

Поступила в редколлегию 10.03.2000

Рецензент: д-р физ.-мат. наук, проф.Слесаренко А.П.

Журавка Андрей Викторович, аспирант кафедры информатики ХГТУСА, ведущий инженер кафедры биржевого, страхового и банковского дела. Научные интересы: проблемы сжатия текстовой информации и последовательностей дискретных данных, проблемы защиты информации. Увлечения и хобби: компьютерная техника, иностранные языки. Адрес: Украина, 61002, Харьков, ул.Сумская, 40, тел. 40-29-46.

Литвиненко Евгений Николаевич, ассистент кафедры информатики ХГТУСА. Научные интересы: проблемы сжатия текстовой информации. Увлечения и хобби: компьютерная техника. Адрес: Украина, 61002, Харьков , ул. Сумская, 40, 40-29-25.

148

PH, 2000, № 2