Существует ли известный максимум того, сколько строк 0 и 1 могут быть сжаты?

38

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

Это, конечно, не правильно (и, возможно, моя память о том, что он точно сказал, не верна). Понятно, что было бы нецелесообразно сжимать какую-либо строку из 0 и 1 до двух битов, потому что (даже если это было технически возможно), слишком много разных типов строк заканчивали бы сжатием до тех же двух бит (так как у нас есть только '01 'и' 10 'на выбор).

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

Другими словами, есть ли способ определить, к какой минимальной (наименьшей возможной) длине можно сжать строку из 0 и 1?

(Здесь меня интересует математическое максимальное сжатие, а не то, что в настоящее время технически возможно.)

x457812
источник
7
Мы также могли бы выбрать «00» и «11». Но аргумент тот же, если вы используете их, есть только четыре разных строки, которые вы можете сжать.
RemcoGerlich
3
mathoverflow.net/q/160099/34859 : Пожалуйста, посмотрите здесь, что с точки зрения принципа голубя всегда будет бесконечное число строк, которые не могут быть сжаты ... Независимо от используемого алгоритма (см. раздел «Фон» в вопрос
ARi
4
Сжатие зависит от ваших знаний о структуре данных. Была эта статья о сжатии шахматных ходов, которая показывает, как добавление знаний помогает увеличить сжатие.
спектры
1
Можете ли вы уточнить: сжатие может быть «с потерями» или «без потерь» (или некоторый «гибрид», который может использовать оба). Вы говорите о максимальном сжатии, используя только методы сжатия «без потерь», или вы также включаете (разрешаете) использовать методы сжатия «с потерями». Другими словами, я предполагаю, что есть 3 возможности: поиск «максимального сжатия», при котором (1) данные должны всегда иметь возможность распаковываться точно так, как это было до сжатия, (2) данные должны быть в состоянии распаковываться, но допускается некоторая «потеря» (3) не требуется, чтобы данные могли быть распакованы.
Кевин Феган
Привет @KevinFegan, в этом случае это должен быть вариант 1: «данные всегда должны быть в состоянии распаковать точно так, как это было до сжатия»
x457812

Ответы:

45

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

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


Что касается невозможности идеального сжатия, вас также может заинтересовать следующее.

DW
источник
но сжатие является одним из методов оценки энтропии. Может ли сжатие и энтропия быть двумя аспектами одного и того же?
Пол Ушак
1
@PaulUszak, да, они очень тесно связаны: см., Например, теорему Шеннона . Но, пожалуйста, обратите внимание: комментарии должны использоваться только для того, чтобы предлагать улучшения / разъяснения к сообщению, а не для того, чтобы задавать дополнительные вопросы. Чтобы задать новый вопрос, воспользуйтесь ссылкой «Задать вопрос» в правой верхней части страницы.
DW
35

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

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

Юваль Фильмус
источник
1
@Veedrac Нет, вы меня правильно поняли. Ваш аргумент (более или менее) показывает, что любая схема кодирования для строк требует битов для некоторых строк. Побочным каналом здесь является процедура декомпрессии. Nlog2N
Юваль Фильмус
27

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

Если строка совпадает с записью 9-й симфонии Бетховена, четвертого движения, в формате AAC, которая хранится на жестком диске моего компьютера, то выходной сигнал - один бит «0».

Если строка является чем-то еще, то выводом является один бит «1», за которым следует идентичная копия исходной строки.

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

gnasher729
источник
2
Хорошая работа, чтобы сделать ответ ясным и очевидным. Стоит отметить, что это похоже на то, что пытается сделать хороший алгоритм сжатия - для данной входной области попытайтесь сократить наиболее часто ожидаемые типы входных данных в обмен на удлинение менее распространенных входных данных.
JBentley
6

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

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

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

m69 'скупой и неприветливый' '
источник
Добро пожаловать! Обратите внимание, что это относится только к сжатию без потерь. Сжатие с потерями может сжимать все строки (по крайней мере, до тех пор, пока вы принимаете алгоритм «Возврат пустой строки» в качестве алгоритма сжатия с потерями. ;-)).
Дэвид Ричерби
@DavidRicherby Это правда, конечно. Но у меня сложилось впечатление от вопроса, что ОП спрашивал о сжатии без потерь, потому что не имеет особого смысла обсуждать максимальное сжатие схемы с потерями; идея о том, что вы можете довести ее до непригодных крайностей, присуща концепции сжатия с потерями.
m69 'язвительный и неприветливый' '29
Да, я думаю, что это разумная интерпретация.
Дэвид Ричерби
-2

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

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

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

gnasher729
источник
4
Это интересно, но я не вижу, как это отвечает на вопрос. Вопрос требует ограничений на сжатие, а не общего обсуждения резервных копий предприятия.
Дэвид Ричерби
Это называется дедупликацией и выполняется с использованием хэшей. Требуется много оперативной памяти для хранения 128-битного хэша для каждого блока на диске. ZFS может сделать это для того, чтобы некоторые блоки совместно использовали некоторое пространство для копирования при записи. Но проблема такого типа сжатия (когда вы пытаетесь сжать массивный набор данных, к которому вам нужен произвольный доступ, и который слишком быстро меняется для обычного сжатия потока, но имеет избыточность на уровне блоков), не имеет отношения к решению этой проблемы. вопрос.
Питер Кордес