Я знаю, что большинство методов сжатия основаны на повторении некоторых данных, чтобы быть эффективными. Например, строка «AAAAAaaaQWERTY» может быть представлена как «5A3aQWERTY» для без потерь и что-то вроде «8aqwerty» для с потерями (это только для примера, а не фактические методы работы). Насколько мне известно, все алгоритмы сжатия учитывают повторения ->константных‹- строк символов.
Здесь возникает проблема со строкой «abcdefghijklmnopqrstuvwxyz». Здесь ничего не повторяется, но, как вы, вероятно, видите, информацию в строке можно представить гораздо короче. В регулярном выражении str. будет "[a-z]" или, может быть, "for(x=0;x‹25;++){ascii(97+x)}".
Рассмотрим также строку "0149162536496481100121" - она может быть представлена как "for(x=0;x‹11;++){x*x}".
Строка "ABEJQZer" может быть представлена как "for(x=0;8;++){ascii(64+x*x)}"
Последние два были примерами знания алгоритма, который может воспроизвести исходную строку. Я знаю, что в целом алгоритмы (если они эффективны) занимают гораздо меньше места, чем данные, которые они могут произвести.
как и в изображениях svg (которые имеют в файле только алгоритмы) размер меньше, чем jpeg.
Мой вопрос в том, есть ли способ сжатия, который берет данные и пытается найти эффективные алгоритмы, которые могут их представить. Например, векторизация растрового изображения (например, http://vectormagic.com/), которая работает и с другими данными.
Рассмотрим аудиоданные (поскольку они могут быть сжаты с потерями) - файлы проектов некоторых аудиоредакторов (например, audacity) содержат информацию типа «генерировать постоянную частоту 120 Гц с амплитудой 0,8 от времени 0 до времени 2 минуты 45,6 секунды» (audacity хранит информацию в формате xml ). Эти метаданные занимают очень мало памяти, и когда проект экспортируется в wav или mp3, программа «преобразует» информацию в фактические сэмплы в экспортированном формате.
В этом случае компрессор должен обратить процесс рендеринга вспять. Он должен взять файл wav или mp3, выяснить, какие алгоритмы могут представлять образцы (если это с потерями, алгоритмы должны произвести некоторое приближение образцов - например, vectormagic.com аппроксимирует изображение) и создать сжатый файл.
Я понимаю, что время сжатия будет невероятно долгим, но существуют ли такие (или подобные) алгоритмы сжатия?