У меня есть хороший метод для сжатия звука , но там надо что-то умное придумать, чтобы решить проблемы со скоростью. Фишка в том, что обычные LPC вынужденно кодируют только один вариант дельты. Т.е. какую умную предсказательную модель не соорудишь, потом все равно надо кодировать остатки, для которых сложно придумать энтропийную модель, ну и плюс вынужденная блочность. А я когда-то придумал, что можно кодировать данные используя преобразованные таблицы вероятностей. Т.е. допустим вероятности у нас вычислены для самих значений самплов, а кодировать с их помощью можно дельты. Только для этого сначала надо пересчитать, какому значению дельты будет соответствовать какое абсолютное значение (для которого известна вероятность). А вот как это делать - я пока придумал только вариант с бинарными деревьями, т.е. чтобы определить вероятность дельты a-b, надо по бинарному дереву счетчиков определить суммарные вероятности для интервалов 0..a, 0..b, а потом их вычесть. Большой плюс такого подхода - что он позволяет использовать несколько разных моделей одновременно, т.к. можно применять и наоборот - собирать статистику для нескольких разных дельт (т.е. разных LPC-моделей например), вычислять по ним вероятности абсолютных значений, а потом эти предсказания смешивать. C т.з. сжатия тут все хорошо - моя модель geopack для geo из calgary corpus до сих пор выдает наилучшее сжатие для этого файла, хотя LPC-модели там примитивные. И еще один плюс этого подхода - только он позволяет корректно кодировать float-point числа, т.к. если float-point пытаться кодировать обычным LPC, получается избыточность, т.к. при вычитании двух FP чисел часто возникают дополнительные разряды, а моя модель все равно смешивает предсказания побитно, так что заодно может без проблем остановиться, когда закончатся биты мантиссы. А главный минус - скорость. Хотя конечно векторизация тут кое-какие идеи дает, но все равно, два прохода по бинарному дереву на каждую модель и на каждый бит данных - это много, скорость как раз для paq :) Хотя я это еще иногда пытаюсь применять для предсказаний курсов и т.п. - там скорость имеет меньшее значение. А еще когда-то для обработки звука прикрутил, для нормализации сигнала. Обычно же нормализация делается достаточно отфонарно - по каким-то эмпирически подобранным средним. А я попробовал искать диапазон значений, имеющих в сумме заданную вероятность, скажем 99% - так автоматически учитывается влияние всяких случайных выбросов, и вообще понятен "физический смысл" модели. Ну и для сжатия картинок по идее это тоже актуально - да и для любых аналоговых данных, в принципе, только бы придумать более эффективную реализацию. Чисто интуитивно кажется, что два прохода по дереву на бит - это слишком много. Но с geopack прошло уже много лет, а ничего более умного так и не придумалось. ideas: 1. Использование variable-length кодов с сохранением порядка, как в rcbwt. 2. Пропуск младших битов мимо общей модели - либо вообще, либо использование одной из LPC для кодирования младших битов. 3. Использование n-ary logistic mixer вместо битового... так получается, что надо вычислять вероятности для всех "символов", т.е. при n=4 надо суммировать 0..3fff,4000..7fff,8000..bfff, т.е. вместо 16*2*n получаем 8*3*2*n... 4. Кэширование результатов пересчета вероятностей в частоты.