Алгоритм, используемый в ZIP-файлах (Lempel-Ziv) на самом деле довольно прост. В нём есть два вида инструкций: literal(n), за которым следует поток данных который надо вывести как есть, и repeat(d, n), который возращается назад на d байт и выводит n байт с этой позиции.http://habrahabr.ru/blogs/crazydev/119676/#comments