Re[5]: О невозможности универсального архиватора
От: Кодт Россия  
Дата: 06.03.03 11:43
Оценка:
Здравствуйте, mrhru, Вы писали:

M>Вопрос был, если я всё правильно напутал, такой: если упаковать все последовательности длиной меньше или равной N, то какова будет общая длина архива. Полагалось, то не меньше суммы длин всех пакуемых последовательностей.


M>Но, "все последовательности длиной меньше или равной N" однозначно задаются только лишь числом N. Поэтому, будет достаточно в качестве результата архивации и использовать само число N. Всё.


Для определенности, будем считать каждую N-значную последовательность монолитным блоком. (Мощность множества блоков, очевидно, S = 2^N).
Рассмотрим суперпоследовательность, в которой каждый блок вошел один раз.
Это значит, что частоты P блоков в ней равны (P = 1/S). И, тем самым, каждый отдельный блок несет одинаковую порцию информации, равную I = -log2 P, т.е. N бит.
То есть, кодирование по Хаффману ничего не дает...

А вот теперь сюрприз! Сколько информации находится в суперпоследовательности? Думаете, L = S * N бит? Хренушки.
Рассмотрим множество суперпоследовательностей. Его мощность T — это число перестановок S блоков, то есть (S!).

Будем считать, что все они равновероятны.
Следовательно, количество информации в одной суперпоследовательности равно J = log2 T,
T ~= (S/e)^S, J = S * log2(S/e) = S * log2(2^N/e) = S * (N — log2 e)
то есть ее можно закодировать двоичным числом меньшей разрядности.
Коэффициент расширения составит J/L = 1-(log2 e)/N.

(КР — величина обратная коэффициенту сжатия. Чем меньше 1, тем лучше).

Пример: N=2. Всего существуют 24 перестановки из 4 2-битных блоков. Следовательно, суперпоследовательность можно закодировать ]log2 24[ = 5 битами. Хотя длина ее составляет 8 бит.

А на деле получается, что суперпоследовательность кто-то должен генерировать. И заниматься случайными перестановками для больших значений S невозможно.
Поэтому генератор, скорее всего будет лепить блоки по порядку.
Это значит, что у одной суперпоследовательности вероятность 1, а у остальных — 0.
То есть это вообще 0 бит!!!

Добавим к коду значение N чтобы отличать разные суперпоследовательности. На это уйдет ]log2 N[ бит. Коэффициент расширения составит (log2 N)/(N*2^N) -- что-то стремящееся к нулю.



Ну что, есть еще желание заниматься спекулятивными тестированиями архиваторов?

На самом деле, если в суперпоследовательности каждый блок встречается равное, но большое число K раз, то T будет стремиться к L = K*S*N. Но этого потолка все равно не достигнет
Перекуём баги на фичи!
Re[3]: О невозможности универсального архиватора
От: MichaelP  
Дата: 06.03.03 11:46
Оценка:
MP>Ссылка на Хафмана здесь не совсем уместна. Например, если возьмем блок длины 1, то Хафманом мы текст никогда не упакуем. Более того, теорему о том, что, при длине сообщения стремящейся к бесконечности, можно длину кода сколь угодно близко приблизить к энтропии сообщения, доказал, если мне не изменяет память, Шеннон. И доказательство очень непростое. Кстати, насколько я помню, один из вариантов доказательства приводит, по сути дела, к идее арифметичиского кодирования.

Поправочка Здесь, конечно, речь шла не о конкретном сообщении, а о мат. ожидании по всем возможным сообщениям.
Re[4]: О невозможности универсального архиватора
От: mrhru Россия  
Дата: 06.03.03 11:59
Оценка:
Здравствуйте, MichaelP, Вы писали:

MP>Здравствуйте, Pushkin, Вы писали:


P>>Множества вложены друг в друга {L<=N-1} + {L=N} = {L<=N}

P>>Если какие-то точки из множества L=N сжались, т.е. отобразились в L<=N-1,
P>>то ровно столько точек в множестве L<=N-1 уже стало занято для перехода точек из этого множества.
P>>Поэтому по крайней мере столько же точек выйдет из множества L<=N-1, т.е. будут несжаты.
P>>Таким образом имеем, что число несжатых последовательностей не меньше числа сжатых.
P>>Но сушествуют последовательности, которые не могут быть сжаты по определению — {0} и {1}.
P>>Поэтому нестрогое неравенство заменяется на строгое.

MP> У меня самого было аналогичное, но несколько более громоздкое.


Гм, по-моему, здесь либо некая путаница в терминах и понятиях, либо в доказательстве Pushkin'а есть излишество. Извиняюсь.

Мы по прежнему говорим о ВСЕХ последовательностях длины <=N?
Тогда НИКАКАЯ последовательность не может быть сжата в указанном смысле, так как результатом получится ДРУГАЯ последовательность из нашего множества ВСЕХ.
Это ИСПОЛЬЗУЕТСЯ в доказательстве — упоминаются последовательности {0} и {1}.

Тогда решение получается очень простое: НИКАКАЯ последовательность не может быть сжата и соответственно количество несжатых (все) последовательностей всегда больше чем сжатых (ноль).


Евгений
Re[5]: О невозможности универсального архиватора
От: Pushkin Россия www.linkbit.com
Дата: 06.03.03 14:02
Оценка:
Здравствуйте, mrhru, Вы писали:

M>Мы по прежнему говорим о ВСЕХ последовательностях длины <=N?

M>Тогда НИКАКАЯ последовательность не может быть сжата в указанном смысле, так как результатом получится ДРУГАЯ последовательность из нашего множества ВСЕХ.

Исходное множество — множество всех последовательностей с L<=N.
Это множество состоит из M=2^(N+1)-1 элементов М.

Архиватор — любое однозначное и обратимое отображение этого множества в любое подмножество множества вообще ВСЕХ последовательностей (любой длины). Количество элементов в этом подмножестве по определению равно M.

Любой архиватор очевидно переведёт некоторое количество (K) исходных последовательностей в последовательности с меньшей длиной, а некоторое количество (оставшиеся M-K) в последовательности с неменьшей длиной.

Утверждение состояло в том, что для любого архиватора K < M-K
Re[6]: О невозможности универсального архиватора
От: mrhru Россия  
Дата: 07.03.03 01:42
Оценка:
Здравствуйте, Pushkin, Вы писали:

P>Исходное множество — множество всех последовательностей с L<=N.

P>Это множество состоит из M=2^(N+1)-1 элементов М.

P>Архиватор — любое однозначное и обратимое отображение этого множества в любое подмножество множества вообще ВСЕХ последовательностей (любой длины). Количество элементов в этом подмножестве по определению равно M.


P>Любой архиватор очевидно переведёт некоторое количество (K) исходных последовательностей в последовательности с меньшей длиной, а некоторое количество (оставшиеся M-K) в последовательности с неменьшей длиной.


P>Утверждение состояло в том, что для любого архиватора K < M-K


Да, спасибо, я уже понял.
Евгений
Re: О невозможности универсального архиватора
От: orangy Россия
Дата: 07.03.03 03:39
Оценка: 9 (1)
Здравствуйте, MichaelP, Вы писали:

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


Ответим сначала на такой вопрос: Для некоторого заданного алгоритма архивации, существует ли такое N, что он сжимает хотя бы на 1 бит любую последовательность из K > N бит? Если такое N существует, то, очевидно, любую последовательность длины K > N можно сжать до N бит, последовательно применяя алгоритм к результату. Следовательно, для того, чтобы такое N существовало, необходимо, чтобы множество всей информации было как минимум ограничено, что не есть правда Отсюда имеем, для любого алгоритма архивации для любого N, найдётся по-крайней мере одна последовательность длины K > N, которую невозможно сжать данным алгоритмом. чтд.
... << RSDN@Home 1.0 beta 6a | Сейчас пятница, 09:03, слушаю 02 — The Four Horsemen >>
"Develop with pleasure!"
Re[2]: О невозможности универсального архиватора
От: MichaelP  
Дата: 07.03.03 06:31
Оценка:
Здравствуйте, orangy, Вы писали:

O>Ответим сначала на такой вопрос: Для некоторого заданного алгоритма архивации, существует ли такое N, что он сжимает хотя бы на 1 бит любую последовательность из K > N бит? Если такое N существует, то, очевидно, любую последовательность длины K > N можно сжать до N бит, последовательно применяя алгоритм к результату. Следовательно, для того, чтобы такое N существовало, необходимо, чтобы множество всей информации было как минимум ограничено, что не есть правда Отсюда имеем, для любого алгоритма архивации для любого N, найдётся по-крайней мере одна последовательность длины K > N, которую невозможно сжать данным алгоритмом. чтд.


Все правильно. Но можно доказать и более сильные утверждения. Что и было сделано в этой ветке.
Re[4]: Re[4]: Встречный вопрос :)
От: mrhru Россия  
Дата: 10.03.03 04:07
Оценка:
Здравствуйте, DjAndy, Вы писали:

DA>M = log2(N)


DA>Конечно логично, тогда информация о местоположении последовательности будет занимать как раз M бит. Но откуда следует эта формула?


Прошу прощения. Эта формула — ответ на другой вопрос, а именно: — какова максимальная длина N последовательности, в которой любая подпоследовательность длиной М встречается ровно один раз?
И ответ: N = 2^M.

А вот на исходный вопрос:

"Существует ли такая последовательность из 0 и 1 длиной N, такая, что в ней не существует 2 равных непересекающихся подпоследовательностей длиной M? Очевидно, что при M = 1 и длине N > 2 это уже не верно, но гораздо интереснее выяснить максимально возможное M для любого N."

ответ гораздо проще: максимально возможное M для любого N — это когда M = N.

Но тем не менее, вопрос о генерации таких последовательностей может оказаться интересным. Выделим его в отдельную задачку.
Евгений
Re: О невозможности универсального архиватора
От: White Eagle Россия  
Дата: 11.03.03 09:28
Оценка: 18 (1)
Здравствуйте, MichaelP, Вы писали:

MP>Мне всегда казалось интуитивно очевидным, что невозможно написать архиватор, который сжимает ВСЁ. Но оказалось, что это убеждение разделяют не все .


Простейшее доказательство невозможности универсального архиватора(вроде тут ещё не было):
Теорема:
Ни одна программа не может сжать без потерь ВСЕ файлы размера >=N для любого N>=0.
Доказательство:
Предположим, что есть программа, сжимающая все файлы длины >=N хотя бы на один бит.
Сожмем ей все файлы длины строго N(всего 2^N файлов). Поскольку все сжатые файлы имеют длину
не больше N-1, всего возможно не более (2^N)-1 файлов: 2^(N-1) файлов размера N-1, 2^(N-2) файлов
размера N-2 и так далее вплоть до одного файла нулевого размера. Так что по крайней мере 2 входных файла сожмутся в один и тот же выходной, то есть потери неизбежны.

Взято отсюда: ftp://rtfm.mit.edu/pub/usenet-by-hierarchy/comp/compression/comp.compression_Frequently_Asked_Questions_(part_1_3)
Никогда не делайте ничего правильно с первого раза, иначе никто потом не оценит, как это было сложно.
Re[2]: О невозможности универсального архиватора
От: MichaelP  
Дата: 11.03.03 10:47
Оценка:
Здравствуйте, White Eagle, Вы писали:

WE>Простейшее доказательство невозможности универсального архиватора(вроде тут ещё не было):

WE>Теорема:
WE>Ни одна программа не может сжать без потерь ВСЕ файлы размера >=N для любого N>=0.
WE>Доказательство:
WE>Предположим, что есть программа, сжимающая все файлы длины >=N хотя бы на один бит.
WE>Сожмем ей все файлы длины строго N(всего 2^N файлов). Поскольку все сжатые файлы имеют длину
WE>не больше N-1, всего возможно не более (2^N)-1 файлов: 2^(N-1) файлов размера N-1, 2^(N-2) файлов
WE>размера N-2 и так далее вплоть до одного файла нулевого размера. Так что по крайней мере 2 входных файла сожмутся в один и тот же выходной, то есть потери неизбежны.

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

Ну и что, что два файла не сжимаются. Зато я могу сжать
1. "в среднем" по всем файлам
2. большинство файлов.

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