Показать сообщение отдельно
Старый 04.08.2006, 03:36   #6
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
Смущение Re: Как я писал самопальный архиватор (тутор-рассказ)

Супер!!! ты крут!!!

чесно сказать я сам так и не смог выдумать ниодин метод архивации... а потом мы это проходили в технаре... дак вот...

метод похожий на твой:

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

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

еще есть метод, мне он само больше нравится (чисто представляю извращенную логику чела который это выдумал)... называется "коды переменной длины"... проходит на битовом уровне... там делается следующим образом: байт - 8 бит - 256 значений... заметили что текст (простой) содержит (обычно) всего не более 90 различных байт (включая скобки там и т.п.)...
подбивается статистика файла какая буква встречается само часто... в русском языке это "О" или "П"... выстраивают сортированный список по частоте... самую частовстречаемую букву заменяют на "1", вторую по встречаемости букву заменяют на "01", третью на "001", четвертую на "0001"... таким образом мы получаем свободные биты в байте часто встречаемых букв, и они вполне компенсируют перебор битов маловстречаемых... и в результате архив превращается в длииинную строку из нулей и единиц...

Еще есть метод сжатия картинок когда все описывают областями... т.е. прямоугольник с координатами X Y и заданной длиной и шириной имеет такой-то цвет... и т.д.

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

есть еще сжатие звука... звук это всеголишь набор чисел... например от -32768 до 32768, число указывает в какое положение выставить динамик колонки... -32768 само далеко втянуть, 32768 само далеко выставить вперед... оцифровка проходит обычно 44 тысячи раз в секунду (есть разные форматы)... таким образом для сохранения одной секунды звука нам потребуется 44000*2 байта(16 бит)=88000 байт... но придумали метод сжатия... проследили по времени... значение практически не изменяется больше чем на 16... т.е. если предидущая высота динамика была 23449 то следующая не будет отличаться от нее больше чем на 16... ну и нафига хранить каждое значение?... записывают начальное значение а потом на сколько оно должно измениться... это занимает нааамного меньше бит...


но это все методы которые были изобретены еще во времена 86-87 процессоров...
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием