Архиватор – это программа, которая позволяет сжимать файлы, чтобы они занимали меньший размер. Это очень полезная вещь, особенно при переносе файлов на дискетах или размещении их в Internet. Но, чтобы сжать файл необходимо его обработать по определенному алгоритму. Существует много различных алгоритмов сжатия, все их можно разделить на два типа: сжатие с потерями и сжатие без потерь. Мы рассмотрим алгоритм сжатия без потерь. Здесь также существует множество алгоритмов. Мы же будем писать программу на основе словарного алгоритма LZW (A. Lempel, J. Ziv, T.Weltch). Идея метода заключается в том, что в процессе обработки исходного файла формируется словарь, слова в котором являются кусочками кода исходного файла. При формировании сжатого файла в него записывается не длинная последовательность байт, а только идентификатор соответствующего слова из словаря (его номер), либо сам байт, если нужного слова нет в словаре (далее вместо слова "байт” я обычно буду употреблять "символ”). При этом получаем выгоду за счет того, что данная цепочка (слово из словаря) может встречаться в файле несколько раз, а длина идентификатора слова значительно короче самого слова. При сохранении сжатого файла не требуется сохранять словарь, т.к. данный алгоритм позволяет создать словарь в процессе распаковки сжатого файла.