Сколько раз может быть сжат файл?

Вы можете использовать функцию bezierPoint(), которая поставляется с P5.js.

Из ссылка :

noFill();
var x1 = 85,
 x2 = 10,
 x3 = 90,
 x4 = 15;
var y1 = 20,
 y2 = 10,
 y3 = 90,
 y4 = 80;
bezier(x1, y1, x2, y2, x3, y3, x4, y4);
fill(255);
var steps = 10;
for (var i = 0; i <= steps; i++) {
  var t = i / steps;
  var x = bezierPoint(x1, x2, x3, x4, t);
  var y = bezierPoint(y1, y2, y3, y4, t);
  ellipse(x, y, 5, 5);
}

points drawn on curve

Возможно, вы захотите использовать значение 0.5 для [113 ], чтобы получить середину.

52
задан samoz 7 February 2015 в 10:09
поделиться

12 ответов

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

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

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

[- 7] 03 04 fc 43 fe 51 52 8 байтов

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

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


RLE - это отправная точка. Если вы хотите узнать больше, посмотрите LZ77 (который просматривает файл, чтобы найти шаблоны) и LZ78 (который строит словарь). Компрессоры, такие как zip, часто пробуют несколько алгоритмов и используют лучший.

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

  1. Я работал в журнале Amiga, который поставлялся с диском. Естественно, мы запаковали диск до жабр. Один из используемых нами инструментов позволяет упаковать исполняемый файл, чтобы при запуске он распаковывался и запускался сам. Поскольку алгоритм распаковки должен быть в каждом исполняемом файле, он должен быть небольшим и простым. Мы часто получали дополнительный выигрыш от двойного сжатия. Распаковка производилась в ОЗУ. Поскольку чтение дискеты происходило медленно, мы часто получали увеличение скорости!
  2. Microsoft поддерживала сжатие RLE для файлов bmp. Кроме того, многие текстовые процессоры выполняли кодирование RLE. Файлы RLE почти всегда значительно сжимаются с помощью более совершенного компрессора.
  3. Во многих играх, над которыми я работал, использовались небольшие, быстрый декомпрессор LZ77. Если вы сжимаете большой прямоугольник пикселей (особенно если у него много цвета фона или если это анимация), вы очень часто можете сжать дважды с хорошими результатами. (Причина? У вас есть только определенное количество битов для определения ретроспективного расстояния и длины. Таким образом, один большой повторяющийся шаблон кодируется несколькими частями, и эти части очень сжимаемы.)
66
ответ дан 7 November 2019 в 09:11
поделиться

Я хотел бы заявить, что предел самого сжатия действительно не был адаптирован к это самый полный предел. Начиная с каждого пикселя или письменного языка находится в схеме записи или черном цвете. Можно было записать программу, которая может декомпилироваться в то, каково это было, скажем книга, безупречно, но могло сжать узор заливки и слова в лучшую систему сжатия. Значение Его, вероятно, взяло бы намного дольше для сжатия, но поскольку системный файл получает larget концерты или байты земли, повторные буквы P и R и q, и черные и белые отклонения могли быть сжаты экс-потенциально в автоматизированную формулу комплекса. mhcien не нужны данные, чтобы иметь смысл, это просто может сделать игру, делающую очень сжатый шаблон. Это в свою очередь затем разрешает нам людей для создания специализированного механизма чтения сжатия. При значении теперь мы имеем реальную власть сжатия. Разработайте весь механизм, который может восстановить информацию о стороне пользователя. Механизм имеет свой собственный язык, который оптимален, никакие пробелы, просто заполнив черные и белые пиксельные поля самого маленького набора или даже пишущий его собственный patternaic язык. Nad таким образом, это может одновременно для mostoptiaml производительности, выделите уникальный шифр или формулу распаковки, когда вниз, и таким образом файл оптимально сжат и имеет пароль, который уникален, чтобы механизм распаковал его позже. Машина может сделать amost limitlesset повторений для сжатия файла далее. Как наличие открытой книги и помещение всех записанных историй человечества в настоящее время на одном листе A4. Я не знаю, но это - другая теория. Таким образом, то, что происходит, является объемом разделения, потому что формула к decrompress имела бы свой собственный размер, evne именование папки и или информация о значке имеет размер, таким образом, можно было пойти далее для помещения каждой формы данных строка информации. хм..

1
ответ дан 7 November 2019 в 09:11
поделиться

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

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

17
ответ дан 7 November 2019 в 09:11
поделиться

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

Если у вас большое количество повторяющихся файлов, формат zip заархивирует каждый отдельно, а затем вы можете заархивировать первый файл zip, чтобы удалить повторяющуюся информацию. В частности, для 7 идентичных файлов Excel размером 108 КБ, заархивирование их с помощью 7-zip приводит к архиву размером 120 КБ. При повторном архивировании получается архив размером 18 КБ. Пройдя мимо, вы получите убывающую отдачу.

14
ответ дан 7 November 2019 в 09:11
поделиться

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

Следовательно, если мы можем взять некоторые файлы и сжать их, мы должны иметь файлы такой длины при сжатии, чтобы сбалансировать те, которые сокращать.

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

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

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

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

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

Повреждение происходит только тогда, когда мы говорим о сжатии с потерями. Например, вы не можете обязательно восстановить изображение точно из файла JPEG. Это означает, что компрессор JPEG может надежно сократить файл изображения, но только за счет невозможности его точного восстановления. Мы часто делаем это для изображений, но не для текста и, в частности, не для исполняемых файлов.

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

7
ответ дан 7 November 2019 в 09:11
поделиться

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

Ваши две точки различны.

  • Сжатие выполняется многократно, и достижение без улучшения в уменьшении размера
    является ожидаемым теоретическим условием
  • Повторное сжатие , вызывающая повреждение
    , вероятно, является ошибкой в ​​реализации (или, возможно, в самом алгоритме)

Теперь давайте посмотрим на некоторые исключения или варианты,

  • Шифрование может применяться повторно без уменьшения размера
    (на самом деле в разы увеличиваются в размере) в целях повышения безопасности
  • Изображения, видео или аудиофайлы все более сжатые
    будут терять данные (фактически будут «повреждены» в некотором смысле )
5
ответ дан 7 November 2019 в 09:11
поделиться

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

3
ответ дан 7 November 2019 в 09:11
поделиться

Сжатие (я думаю без потерь) в основном означает выражение чего-то более кратко. Например,

111111111111111

можно более точно выразить как

15 X '1'

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

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

15 X '1'

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

3
ответ дан 7 November 2019 в 09:11
поделиться

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

3
ответ дан 7 November 2019 в 09:11
поделиться

Сколько раз я могу сжать файл, прежде чем он не станет меньше?

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

Сколько раз я могу сжать файл, прежде чем он станет поврежденным?

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

3
ответ дан 7 November 2019 в 09:11
поделиться

Вот окончательный алгоритм сжатия (в Python), который при повторном использовании сжимает любые строка цифр до размера 0 (это оставлено в качестве упражнения для читателя, как применить это к строке байтов).


def compress(digitString):
    if digitString=="":
        raise "already as small as possible"
    currentLen=len(digitString)
    if digitString=="0"*currentLen:
        return "9"*(currentLen-1)
    n=str(long(digitString)-1); #convert to number and decrement
    newLen=len(n);
    return ("0"*(currentLen-newLen))+n; # add zeros to keep same length

#test it
x="12";
while not x=="":
    print x;
    x=compress(x)

Программа выводит 12 11 10 09 08 07 06 05 04 03 02 01 00 9 8 7 6 5 4 3 2 1 0, затем пустая строка. Он не сжимает строку на каждом проходе, но при достаточном количестве проходов сжимает любую строку цифр до строки нулевой длины. Не забудьте записать, сколько раз вы отправляли его через компрессор, иначе вы не сможете его вернуть.

2
ответ дан 7 November 2019 в 09:11
поделиться

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

-1
ответ дан 7 November 2019 в 09:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: