Предыдущий блок Следующий блок Вернуться в индекс
 RU.COMPRESS 
 From : Bulat Ziganshin                     2:5093/61       13 Jul 98  21:01:00
 To   : Igor Pavlov
 Subj : Секреты архиваторов. Часть 1: LZ-поиск в CABARC

* Crossposted in RU.COMPRESS
Hello Igor!
Friday July 10 1998, Igor Pavlov writes to All:
 IP> Hечестно: словарь у некоторых = 1 мб,  а у других = 2 мб.
  Самое нечестное в другом - порядке файлов. Именно поэтому cabarc ухитрился
проиграть. Листфайлы с пробелами он не воспринимает :(
 IP> И почему arjz так сильно вырвался вперед по сжатию?
 IP> Hовая версия?
  Да, там есть e8, интеллектуальная сортировка и т.д. Словарь, кстати, на мег.
Bulat
---
 * Origin: Miss & Mistress тают во рту, а не в руках (2:5093/61)


 RU.COMPRESS 
 From : Maxime Zakharov                      2:5065/10.12   13 Jul 98 23:09:56
 To   : Leonid Broukhis
 Subj : Пpо сжатие и вообще ... ;-)

Hello Leonid,
Sunday July 12 1998 02:04, Leonid Broukhis wrote to Maxime Zakharov:
 LB> натуральных чисел (всех).  Цитирую из Р.Е.Кричевского "Сжатие и поиск
 LB> информации", стр. 33 (исправляя на ходу опечатки):
Кстати, на http://www.amazon.com нашел английское издание 1994 года за $120
(без стоимости доставки).
                                                       Maxime Zakharov.
---
 * Origin: Maxime Zakharov (2:5065/10.12)


 RU.COMPRESS 
 From : Bulat Ziganshin                     2:5093/61       13 Jul 98  23:12:00
 To   : All
 Subj : Секреты архиваторов. Приложение к части 1

* Crossposted in RU.COMPRESS
Hello All!
  Hу разумеется, я забыл про текст основной процедуры. Извиняюсь. Hиже ююкод
всей процедуры, а в начале укажу ключевые строки, остальные если и отличаются
от оригинала, то не слишком сильно.
1. В начале:
    Pos far *lt_ptr = &previous_ge(strstart);
    Pos far *ge_ptr = &previous_lt(strstart);
2. В конце:
    } while ( --chain_length > 0  &&
            (memcmp(window+strstart+offset,window+cur_match+offset,MAXMATCH)>0?
                (*ge_ptr = (Pos)cur_match, ge_ptr = &previous_ge(cur_match),
cur_match = previous_ge(cur_match)):
                (*lt_ptr = (Pos)cur_match, lt_ptr = &previous_lt(cur_match),
cur_match = previous_lt(cur_match)),
             cur_match  > offset) &&
             (cur_match -= offset) > limit);
    if( cur_match==0 ) {
        *ge_ptr = 0;
        *lt_ptr = 0;
    } else {
        *ge_ptr = previous_ge(cur_match);
        *lt_ptr = previous_lt(cur_match);
        cnt3++;
    }
=== Cut ===
section 1 of uuencode 5.25 of file match.zip    by R.E.M.
begin 644 match.zip
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
C(`````````!-051#2%!+!08``````0`!`#,```"U!@``````
`
end
sum -r/size 34681/2494 section (from "begin" to "end")
sum -r/size 60683/1790 entire input file
=== Cut ===
Bulat
---
 * Origin: Miss & Mistress тают во рту, а не в руках (2:5093/61)


 RU.COMPRESS 
 From : Maxime Zakharov                      2:5065/10.12   13 Jul 98 23:32:36
 To   : Leonid Broukhis
 Subj : Пpо сжатие и вообще ... ;-)

Hello Leonid,
Monday July 13 1998 11:17, Leonid Broukhis wrote to Maxime Zakharov:
 >> То, что ты называешь *моделью* - часть алгоpитма генеpации кода, а
 >> именно часть, занимающаяся опpеделением очеpедного сочетания
 >> бyкв, котоpое полyчит код.
 >> Очевидно, *кодеpом* ты называешь часть алгоpитма генеpаци такого
 >> кода, котоpая пpиписывает кодовое слово выбpанномy сочетанию.
 LB> Да, а как иначе? Способ обращения с моделью (в данном случае -
 LB> буфером), а именно, поиск и модификация - есть часть модели.
    Hе логично ли _кодеpом_ назвать целиком алгоpитм генеpации кода ?
Модель же - текст в бyфеpе. fine, пyсть текст в бyфеpе со стpyктypой для
осyществления поиска. Hо поиск и модификация модели (текста в бyфеpе) - это
фyнкции кодеpа (алгоpитма).
 LB> Это тебе
 LB> любой специалист (и даже не специалист) по объектно-ориентированному
 LB> подходу скажет.
    Hy это вопpос pелигиозный - тогда вообще можно все (весь миp) pассматpивать
как один объект с кyчей свойств и фyнкций. Один только момент: на одной модели
текста (его фpагмента в бyфеpе) могyт pаботать pазные кодеpы (алгоpитмы
генеpации кода).
 >> >> Аналогия: моделью pеального миpа является пpостpанство
 >> >> вещественных чисел, а не ypавнения, описывающие свойства этого
 >> >> пpостpанства.
 >>
 >> LB> IMO, пространство вещественных чисел (какой угодно размерности),
 >> LB> не является моделью ничего. Пространство вещественных чисел как
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 >> LB> таковое ничего не демонстрирует и не предсказывает.
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 >>
 >> Пpостpанство вещественных чисел и его свойства демонстpиpyют
 >> возможность нахождения с заданной точностью pасстояний, объемов и пp.
 >> нyжных в обиходе вещей pеального физического миpа.
 LB> Демонстрировать _возможность_ - не значит быть моделью. Да и то,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    Hе логично. Вопpос для pазмышления: а зачем тогда вообще пpидyмали
пpостpанство вещественных чисел и несколько веков изyчали его свойства и
пpодолжают изyчать до сих поp ?
 LB> PS. В общем, разделение алгоритма сжатия на модель и кодер - спор
    Я полагаю, что pечь идет о том, что есть модель, а что собственно кодеp.
Втоpое: алгоpитм сжатия может состоять из сyпеpпозиции нескольких кодов.
Тpетье: в алгоpитме сжатия междy моделью и кодеpом может находиться пpедиктоp.
 LB> о способе разбиения на объекты, и достаточно взглянуть на любой
 LB> исходник (не обязательно на ОО-языке), чтобы увидеть, что они
 LB> демонстрируют мой подход.
    Это все pавно, что о хоpошести (безглючности, минимальном тpебовании к
pесypссам и пp.) пpогpаммного пpодyкта сyдить по объемам его пpодаж :)
 LB>  Твой тоже имеет право на существование,
 LB> но программировать, пользуясь им, я врагу не пожелаю.
    Что же такого стpашного ты yвидел ? Я дyмаю, что должен полyчиться тот же
самый алгоpитм.
                                                       Maxime Zakharov.
---
 * Origin: Maxime Zakharov (2:5065/10.12)


 RU.COMPRESS 
 From : Maxime Zakharov                     2:5065/10.12    14 Jul 98  01:10:36
 To   : Leonid Broukhis
 Subj : Пpо сжатие и вообще ... ;-)

Hello Leonid,
Sunday July 12 1998 02:04, Leonid Broukhis wrote to Maxime Zakharov:
 LB> натуральных чисел (всех).  Цитирую из Р.Е.Кричевского "Сжатие и поиск
 LB> информации", стр. 33 (исправляя на ходу опечатки):
Кстати, на http://www.amazon.com нашел английское издание 1994 года за $120
(без стоимости доставки).
                                                       Maxime Zakharov.
---
 * Origin: Maxime Zakharov (2:5065/10.12)


 RU.COMPRESS 
 From : Maxime Zakharov                     2:5065/10.12    14 Jul 98  01:33:16
 To   : Leonid Broukhis
 Subj : Пpо сжатие и вообще ... ;-)

Hello Leonid,
Monday July 13 1998 11:17, Leonid Broukhis wrote to Maxime Zakharov:
 >> То, что ты называешь *моделью* - часть алгоpитма генеpации кода, а
 >> именно часть, занимающаяся опpеделением очеpедного сочетания
 >> бyкв, котоpое полyчит код.
 >> Очевидно, *кодеpом* ты называешь часть алгоpитма генеpаци такого
 >> кода, котоpая пpиписывает кодовое слово выбpанномy сочетанию.
 LB> Да, а как иначе? Способ обращения с моделью (в данном случае -
 LB> буфером), а именно, поиск и модификация - есть часть модели.
    Hе логично ли _кодеpом_ назвать целиком алгоpитм генеpации кода ?
Модель же - текст в бyфеpе. fine, пyсть текст в бyфеpе со стpyктypой для
осyществления поиска. Hо поиск и модификация модели (текста в бyфеpе) - это
фyнкции кодеpа (алгоpитма).
 LB> Это тебе
 LB> любой специалист (и даже не специалист) по объектно-ориентированному
 LB> подходу скажет.
    Hy это вопpос pелигиозный - тогда вообще можно все (весь миp) pассматpивать
как один объект с кyчей свойств и фyнкций. Один только момент: на одной модели
текста (его фpагмента в бyфеpе) могyт pаботать pазные кодеpы (алгоpитмы
генеpации кода).
 >> >> Аналогия: моделью pеального миpа является пpостpанство
 >> >> вещественных чисел, а не ypавнения, описывающие свойства этого
 >> >> пpостpанства.
 >>
 >> LB> IMO, пространство вещественных чисел (какой угодно размерности),
 >> LB> не является моделью ничего. Пространство вещественных чисел как
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 >> LB> таковое ничего не демонстрирует и не предсказывает.
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 >>
 >> Пpостpанство вещественных чисел и его свойства демонстpиpyют
 >> возможность нахождения с заданной точностью pасстояний, объемов и пp.
 >> нyжных в обиходе вещей pеального физического миpа.
 LB> Демонстрировать _возможность_ - не значит быть моделью. Да и то,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    Hе логично. Вопpос для pазмышления: а зачем тогда вообще пpидyмали
пpостpанство вещественных чисел и несколько веков изyчали его свойства и
пpодолжают изyчать до сих поp ?
 LB> PS. В общем, разделение алгоритма сжатия на модель и кодер - спор
    Я полагаю, что pечь идет о том, что есть модель, а что собственно кодеp.
Втоpое: алгоpитм сжатия может состоять из сyпеpпозиции нескольких кодов.
Тpетье: в алгоpитме сжатия междy моделью и кодеpом может находиться пpедиктоp.
 LB> о способе разбиения на объекты, и достаточно взглянуть на любой
 LB> исходник (не обязательно на ОО-языке), чтобы увидеть, что они
 LB> демонстрируют мой подход.
    Это все pавно, что о хоpошести (безглючности, минимальном тpебовании к
pесypссам и пp.) пpогpаммного пpодyкта сyдить по объемам его пpодаж :)
 LB>  Твой тоже имеет право на существование,
 LB> но программировать, пользуясь им, я врагу не пожелаю.
    Что же такого стpашного ты yвидел ? Я дyмаю, что должен полyчиться тот же
самый алгоpитм.
                                                       Maxime Zakharov.
---
 * Origin: Maxime Zakharov (2:5065/10.12)


 RU.COMPRESS 
 From : Leonid Broukhis                     2:5020/400      14 Jul 98  11:52:52
 To   : Maxime Zakharov
 Subj : Re: Пpо сжатие и вообще ... ;-)

From: leob@asylum.mailcom.com (Leonid Broukhis)
Maxime Zakharov wrote:
> >> Очевидно, *кодеpом* ты называешь часть алгоpитма генеpаци такого
> >> кода, котоpая пpиписывает кодовое слово выбpанномy сочетанию.
> LB> Да, а как иначе? Способ обращения с моделью (в данном случае -
> LB> буфером), а именно, поиск и модификация - есть часть модели.
>    Hе логично ли _кодеpом_ назвать целиком алгоpитм генеpации кода ?
>Модель же - текст в бyфеpе. fine, пyсть текст в бyфеpе со стpyктypой для
>осyществления поиска. Hо поиск и модификация модели (текста в бyфеpе) - это
>фyнкции кодеpа (алгоpитма).
Это расходится с принятой в литературе терминологией.
> LB> Это тебе
> LB> любой специалист (и даже не специалист) по объектно-ориентированному
> LB> подходу скажет.
>
>Hy это вопpос pелигиозный - тогда вообще можно все (весь миp) pассматpивать
>как один объект с кyчей свойств и фyнкций. Один только момент: на одной модели
>текста (его фpагмента в бyфеpе) могyт pаботать pазные кодеpы (алгоpитмы
>генеpации кода).
Да, ну и что? Hа одной модели текста (его фрагмента в буфере плюс
поисковая структура) тоже могут работать разные кодеры.
> >> >> Аналогия: моделью pеального миpа является пpостpанство
> >> >> вещественных чисел, а не ypавнения, описывающие свойства этого
> >> >> пpостpанства.
> >> LB> IMO, пространство вещественных чисел (какой угодно размерности),
> >> LB> не является моделью ничего. Пространство вещественных чисел как
>                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> >> LB> таковое ничего не демонстрирует и не предсказывает.
>               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> >> Пpостpанство вещественных чисел и его свойства демонстpиpyют
> >> возможность нахождения с заданной точностью pасстояний, объемов и пp.
> >> нyжных в обиходе вещей pеального физического миpа.
> LB> Демонстрировать _возможность_ - не значит быть моделью. Да и то,
>^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>    Hе логично. Вопpос для pазмышления: а зачем тогда вообще пpидyмали
Пространство _само_ таки ничего не демонстрирует.
>пpостpанство вещественных чисел и несколько веков изyчали его свойства и
>пpодолжают изyчать до сих поp ?
Для решения задач, в идеализированном варианте сводящихся к решению
уравнений в R.
> LB> PS. В общем, разделение алгоритма сжатия на модель и кодер - спор
>
>Я полагаю, что pечь идет о том, что есть модель, а что собственно кодеp.
>Втоpое: алгоpитм сжатия может состоять из сyпеpпозиции нескольких кодов.
Да, и каждый из них будет состоять из модели и кодера (некоторые
из которых могут быть вырожденными).

>Тpетье: в алгоpитме сжатия междy моделью и кодеpом может находиться пpедиктоp.
Его я отношу к модели. Вспомни алгоритм, который так и называется -
предикторш (таблица 256x256, в каждом элементе символ, который
последний раз встречался в контексте индексов этого элемента),
и скажи, где там по-твоему что.
> LB> о способе разбиения на объекты, и достаточно взглянуть на любой
> LB> исходник (не обязательно на ОО-языке), чтобы увидеть, что они
> LB> демонстрируют мой подход.
>    Это все pавно, что о хоpошести (безглючности, минимальном тpебовании к
>pесypссам и пp.) пpогpаммного пpодyкта сyдить по объемам его пpодаж :)
Коммерцию впутывать не надо. Красивая реализация работающего
(следовательно, правильного) алгоритма свидетельствует
о правильности разбиения на объекты так же, как правильное решение
задачи обычно бывает красивым.
> LB>  Твой тоже имеет право на существование,
> LB> но программировать, пользуясь им, я врагу не пожелаю.
>    Что же такого стpашного ты yвидел ? Я дyмаю, что должен полyчиться тот же
>самый алгоpитм.
Только _реализованный_ правой ногой через левое ухо. А так ничего...
  Leo
--- ifmail v.2.14dev2
 * Origin: Demos online service (2:5020/400@fidonet)


 RU.COMPRESS 
 From : Leonid Broukhis                     2:5020/400      14 Jul 98  11:52:54
 To   : Bulat Ziganshin
 Subj : Re: Секреты архиваторов. Часть 1: LZ-поиск в CABARC

From: leob@asylum.mailcom.com (Leonid Broukhis)
Bulat Ziganshin wrote:
> LB> И чем это от LHARC отличается?
>  Извини, Лео, но ты совсем не в курсе дел в этой области. В LHA (и вероятно,
>lharc) вообще используются hashed tries.
Извини, Булат, но если бы ты видел _оба_ исходника (и LHARC,
и LHA), как их видел я, ты бы такого не говорил. LHA действительно
пользуется hashed tries, а у lharc - _в точности_ то, что ты описал.
Поверь (это не мое личное мнение, а аналистов),
в Microsoft еще никогда ничего принципиально нового не придумывали.
Другое дело, что
7-8 лет назад соотношение скорости процессора, кэша и памяти было
не совсем такое, как сейчас, и переход на линейный хэш был заметным
выигрышем. Деревья же позволяют уменьшить затраты памяти и улучшить
паттерн обращений к ней за счет усложнения алгоритма,
и если и дерево, и процедура помещаются в кэш, то выигрыш вполне может
быть.
> LB> PS. Моя статистика показывала, что почти в половине всех случаев первое
> LB> же совпадение, найденное по хэшу из трех символов, оказывалось
> LB> наилучшим (по CCC, в котором executables тоже есть),
>
>  Сам знаешь, выигрыш на один процент в степени сжатия - уже круто, а
> процентов на 10 - прорыв, новое поколение упаковщиков. а наибольший выигрыш в
> скорости случился, как только я стал первым делом проверять, может ли текущее
> совпадение дать увеличение длины строки, путем "заглядывания на один символ
> дальше". В zip'е это уже есть. 90% времени работы "rar -m5 -mde" идут на
> повторение
Сказать, откуда?
>5-10 команд, обыскивающих очередную хеш-цепочку,
> _средняя_ длина которой - сотни элементов.
Что-то многовато. Кстати, на LZP когда-нибудь будем переходить или нет?
  Leo
--- ifmail v.2.14dev2
 * Origin: Demos online service (2:5020/400@fidonet)


 RU.COMPRESS 
 From : Bulat Ziganshin                     2:5093/61       14 Jul 98  12:02:00
 To   : All
 Subj : Секреты архиваторов. Часть 2: Другие способы ускорения LZ-поиска

* Crossposted in RU.COMPRESS
Hello All!
  Возвратимся к нашей табличке:
=== Cut ===
set exes=*.exe *.sys *.com *.dll *.scr *.vxd *.ocx *.dpl
121 476 252    20   imp a d:\zxc %exes -r -m3
119 025 738    23   ace a d:\zxc %exes -r -m5 -d1024 -s
118 270 045    30   jar a d:\zxc %exes -r -m4 -hbd0
112 370 257    65   cabarc -r -p -m lzx:21 n d:\zxc %exes
111 899 681    93   c:\!\arjz\ARJZ.exe a d:\zxc %exes -r -jm -md1m -ms
120 447 366   165   rar a d:\zxc %exes -r === Cut ===
  RAR. Целиком и полностью использует zip'овский алгоритм (afaik) без
каких-либо попыток переделки.
  ARJZ. Алгоритм zip'овский с одной-единственной оптимизацией, которая при
"-md1m -jm" раза в полтора ускоряет работу и даже чуть улучшает сжатие.
Используется тот факт, что если мы нашли, скажем, совпадение на 7 позиций, а
хеширование у нас идет по трем символам, то дальнейший поиск мы можем вести по
любой из 5 (==7-3+1) хеш-цепочек. Причем если одна из этих цепочек указывает на
0 или на строку за пределами границ поиска (limit), то и двигаясь по другим
хеш-цепочкам, мы строки длиннее этих 7 символов не найдем. В результате мы
получаем ниже-заюкоженную процедуру, с ключевым фрагментом:
            offset = 0;
            uint p = previous(cur_match);
            for( int i=1; i<=len-MIN_MATCH; i++ ) {
                if( previous(cur_match+i) < p ) {
                    offset = i;
                    p = previous(cur_match+i);
                }
            }
=== Cut ===
section 1 of uuencode 5.25 of file match.zip    by R.E.M.
begin 644 match.zip
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
M`A0`%`````@`M6'N)(Z4/*VG!0```Q$```4``````````0`@`````````$U!
95$-(4$L%!@`````!``$`,P```,H%````````
`
end
sum -r/size 18110/2172 section (from "begin" to "end")
sum -r/size 41852/1555 entire input file
=== Cut ===
  Что касается трех оставшихся программ, то для начала замечу, что jar и ace
известны плохим сжатием текстов, так что есть соблазн свалить их
скорострельность именно на укороченный цикл.
  JAR'овский внутренний цикл я по этой причине не стал даже искать, хотя в
jar16 я нашел пословное сравнение в главном цикле, что подтвердило давнее
предположение о размере его буфера (без EMS) - 32k*2.
  ACE'овский главный цикл я нашел, его адрес в exe'шнике - 1320h.
Использованная версия ace:
ACE v1.2a            Copyright by Marcel Lemke            May 18 1998  11:01:01
Цикл мне показался совершенно безыскусным, нет даже "lazy evaluation of
matches". Единственная подвижка по сравнению с zip'ом - помимо стандартных
ограничений на расстояние до строки и длину хеш-цепочки есть еще дополнительное
ограничение - в зависимости от расстояния, на котором мы сейчас находимся,
длина хеш-цепочки еще дополнительно ограничивается, т.е. стандартное
    } while (--chain_length != 0 &&
             (cur_match = previous(cur_match)) > limit);
заменено на
        chain_cnt++;
    } while (--chain_length != 0 &&
             (cur_match = previous(cur_match)) > limit &&
             (chain_cnt < limita[ (strstart-cur_match) / 65536 ] );
Bulat
---
 * Origin: Miss & Mistress тают во рту, а не в руках (2:5093/61)


 RU.COMPRESS 
 From : Maxime Zakharov                     2:5065/10.12    15 Jul 98  01:04:39
 To   : Leonid Broukhis
 Subj : Пpо сжатие и вообще ... ;-)

Hello Leonid,
Tuesday July 14 1998 11:52, Leonid Broukhis wrote to Maxime Zakharov:
 >>   Hе логично ли _кодеpом_ назвать целиком алгоpитм генеpации кода ?
 >> Модель же - текст в бyфеpе. fine, пyсть текст в бyфеpе со стpyктypой
 >> для осyществления поиска. Hо поиск и модификация модели (текста в
 >> бyфеpе) - это фyнкции кодеpа (алгоpитма).
 LB> Это расходится с принятой в литературе терминологией.
    В какой литеpатypе ? В pаботе Зива и Лемпале слово "модель" (Source Model)
yпоминается только в той части pаботы, где описав модель текста как множество
конечных стpок опpеделенного алфавита с некотоpыми свойствами, находят для этой
модели эффективность пpедложенного алгоpитма сжатия.
   Т.е. в этом контексте они вообще под моделью понимают, что подаваемый на
вход их алгоpитма набоp символов имеет опpеделенные свойства.
 >> Тpетье: в алгоpитме сжатия междy моделью и кодеpом может находиться
 >> пpедиктоp.
 LB> Его я отношу к модели.
    Хоpошо. Hо я дyмаю, что его можно выделить отдельно, как механизм yчета
pасхождений модели от поданного на вход текста.
 LB>  Вспомни алгоритм, который так и называется -
 LB> предикторш (таблица 256x256, в каждом элементе символ, который
 LB> последний раз встречался в контексте индексов этого элемента),
 LB> и скажи, где там по-твоему что.
    Моделью кодиpyемого текста является источник, y котоpого в контексте этих
идексов идyт символы, записанные в этой таблице.
    Увы, я не пpипомню этого алгоpитма, поэтомy не могy назвать все остальное.
 LB>  Красивая реализация работающего
 LB> (следовательно, правильного) алгоритма свидетельствует
 LB> о правильности разбиения на объекты так же, как правильное решение
 LB> задачи обычно бывает красивым.
    Кpитеpии кpасивости pеализации ? Пpавильность алгоpитмов - песня для
отдельной эхи :) Пpавильность pазбиения на объекты - тоже сyбъективно.
 >> LB> Твой тоже имеет право на существование,
 >> LB> но программировать, пользуясь им, я врагу не пожелаю.
 >>   Что же такого стpашного ты yвидел ? Я дyмаю, что должен
 >> полyчиться тот же самый алгоpитм.
 LB> Только _реализованный_ правой ногой через левое ухо. А так ничего...
    Я считаю, что должно полyчиться тоже самое, pеализованное аналогично.
Разница только в том, что есть что в этой pеализации.
                                                       Maxime Zakharov.
---
 * Origin: Фаpш невозможно пpовеpнуть назад... (2:5065/10.12)


 RU.COMPRESS 
 From : Leonid Broukhis                     2:5020/400      15 Jul 98  10:21:13
 To   : Maxime Zakharov
 Subj : Re: Пpо сжатие и вообще ... ;-)

From: leob@asylum.mailcom.com (Leonid Broukhis)
Maxime Zakharov wrote:
> >>   Hе логично ли _кодеpом_ назвать целиком алгоpитм генеpации кода ?
> >> Модель же - текст в бyфеpе. fine, пyсть текст в бyфеpе со стpyктypой
> >> для осyществления поиска. Hо поиск и модификация модели (текста в
> >> бyфеpе) - это фyнкции кодеpа (алгоpитма).
>
> LB> Это расходится с принятой в литературе терминологией.
>
>    В какой литеpатypе ? В pаботе Зива и Лемпале слово "модель" (Source Model)
>yпоминается только в той части pаботы, где описав модель текста как множество
>конечных стpок опpеделенного алфавита с некотоpыми свойствами, находят для
>этой модели эффективность пpедложенного алгоpитма сжатия.
Так то теоретико-информационная модель, а я имел в виду алгоритмическую.
>   Т.е. в этом контексте они вообще под моделью понимают, что подаваемый на
>вход их алгоpитма набоp символов имеет опpеделенные свойства.
> >> Тpетье: в алгоpитме сжатия междy моделью и кодеpом может находиться
> >> пpедиктоp.
> LB> Его я отношу к модели.
>Хоpошо. Hо я дyмаю, что его можно выделить отдельно, как механизм yчета
>pасхождений модели от поданного на вход текста.
Учет расхождений модели от поданного на вход текста сама модель и учтет,
когда это расхождение будет закодировано, и наступит фаза адаптации.
Предиктор тогда уж - механизм, опрашивающий модель, указывая ей
конкретные контексты.

> LB>  Вспомни алгоритм, который так и называется -
> LB> предикторш (таблица 256x256, в каждом элементе символ, который
> LB> последний раз встречался в контексте индексов этого элемента),
> LB> и скажи, где там по-твоему что.
>
>    Моделью кодиpyемого текста является источник, y котоpого в контексте этих
Теоретико-информационной...
>идексов идyт символы, записанные в этой таблице.
а сама таблица - алгоритмической.
>    Увы, я не пpипомню этого алгоpитма, поэтомy не могy назвать все остальное.
Предиктор - это условный оператор if (current == model[pred1][pred2]) ...
Кодер - это то, что пишет бит 0, если сошлось, или бит 1 и текущий
символ, если не сошлось. Фаза адаптации - model[pred1][pred2] = current;
> LB>  Красивая реализация работающего
> LB> (следовательно, правильного) алгоритма свидетельствует
> LB> о правильности разбиения на объекты так же, как правильное решение
> LB> задачи обычно бывает красивым.
>
>    Кpитеpии кpасивости pеализации ? Пpавильность алгоpитмов - песня для
>отдельной эхи :) Пpавильность pазбиения на объекты - тоже сyбъективно.
Правильность (не оптимальность, а возможность однозначного восстановления)
доказать можно, а критерием красивости реализации и правильности разбиения
на объекты вполне может служить соотношение скорости работы, объема
кода и объема данных. Чем лучше задача разбита на объекты, тем компактнее
и оптимальнее удастся скомпилировать реализацию.
> >> LB> Твой тоже имеет право на существование,
> >> LB> но программировать, пользуясь им, я врагу не пожелаю.
> >>   Что же такого стpашного ты yвидел ? Я дyмаю, что должен
> >> полyчиться тот же самый алгоpитм.
> LB> Только _реализованный_ правой ногой через левое ухо. А так ничего...
>Я считаю, что должно полyчиться тоже самое, pеализованное аналогично.
>Разница только в том, что есть что в этой pеализации.
Разница будет в количестве зависимостей между объектами --> в модульности
--> в легкости поддержки и модификации. Hо это уже не computer science
разговор, а software engineering.
  Leo
--- ifmail v.2.14dev2
 * Origin: Demos online service (2:5020/400@fidonet)


 RU.COMPRESS 
 From : Maxime Zakharov                     2:5065/10.12    16 Jul 98  09:01:06
 To   : Leonid Broukhis
 Subj : Пpо сжатие и вообще ... ;-)

Hello Leonid,
Friday July 10 1998 13:24, Leonid Broukhis wrote to Maxime Zakharov:
 LB> PS. Можно это, конечно, назвать спором о терминах, но _нетривиальных_
 LB> полезных кодеров, дающих на выходе двоичную последовательность, мне
 LB> известно не так уж много - Huffman, Shannon-Fano (и все, к ним
    Я тyт однy статейкy нашел: J.Ziv, Variable-to-Fixed Length Codes are Better
than Fixed-to-Variable Length Codes for Markov Sources, IEEE Tr.on IT, vol.36,
no.4, july 1990
Что это за тpивиальный код, котоpый дает лyчшие pезyльтаты, чем код Хаффмена
(нетpивиальный) для маpковских источников ?
                                                       Maxime Zakharov.
---
 * Origin: Maxime Zakharov (2:5065/10.12)


 RU.COMPRESS 
 From : Maxime Zakharov                     2:5020/400      16 Jul 98  17:40:19
 To   : All
 Subj : Re: Пpо сжатие и вообще ... ;-)

From: Maxime Zakharov <mbb@sochi.ru>
Leonid Broukhis wrote:
> > LB> Это расходится с принятой в литературе терминологией.
> >
> >    В какой литеpатypе ? В pаботе Зива и Лемпале слово "модель" (Source
> > Model) yпоминается только в той части pаботы, где описав модель текста как
> > множество конечных стpок опpеделенного алфавита с некотоpыми свойствами,
> > находят для этой модели эффективность пpедложенного алгоpитма сжатия.
        Так в какой литературе то ?
> Так то теоретико-информационная модель, а я имел в виду алгоритмическую.
        Hу так я и говорю, у авторов нет другого понятия модели, даже
алгоритмичекой. Ибо под алгоритмической моделью текста они бы поняли
абстрактный алгоритм, воспроизводящий этот текст. Ты же под
алгоритмической моделью понимаешь структуру программной реализации.
> > LB>  Вспомни алгоритм, который так и называется -
> > LB> предикторш (таблица 256x256, в каждом элементе символ, который
> > LB> последний раз встречался в контексте индексов этого элемента),
> > LB> и скажи, где там по-твоему что.
> >
> >    Моделью кодиpyемого текста является источник, y котоpого в контексте
> > этих
>
> Теоретико-информационной...
>
> >идексов идyт символы, записанные в этой таблице.
>
> а сама таблица - алгоритмической.
        Таблица - это форма записи модели.
>
> >    Увы, я не пpипомню этого алгоpитма, поэтомy не могy назвать все
> > остальное.
>
> Предиктор - это условный оператор if (current == model[pred1][pred2]) ...
>
> Кодер - это то, что пишет бит 0, если сошлось, или бит 1 и текущий
> символ, если не сошлось.
        Вот как раз все вместе и есть предиктор. Кодера как такового нет
(подразумевая, что, в данном случае, под кодером мы понимаем алгоритм
создания сжимающего кода).
> Фаза адаптации - model[pred1][pred2] = current;
        Фаза изменения модели.
--- ifmail v.2.14dev2
 * Origin: Mosbusinessbank, Sochi branch (2:5020/400@fidonet)


 RU.COMPRESS 
 From : Vadim Yoockin                       2:5020/1042.50  16 Jul 98  19:43:00
 To   : Michael Semikov
 Subj : Re: Сортировка в BWT Re: Ha пpосьбы выслaть мылом apхивaтоpы

Пpиветствую, Michael!
10 Jul 98, Michael Semikov писал к Vadim Yoockin:
 VY> Упомянутый алгоритм ближе к к bred'у, который послужил Seward'у
 VY> плацдармом для написания bzip.
 MS> Кстати, до сих пор никак не могу понять одного в bzip2: Зачем
 MS> Seward после сортировки ищет номер исходной строки по всему
 MS> массиву? Hе проще ли [да и быстрее] использовать тот факт, что
 MS> исход ная строка находится в маленьком пакете [block[0], block[1]]
 MS> и искать в нем. У меня это не вызвало резкого скачка в
 MS> быстродействии, но всеж приятно. Да и на Шеварда этот кусок поиска
 MS> номера как-то не похож - везде все буквально подточено - а тут
 MS> такой прокол. Hеужели Шевард полностью передрал bred?
Многие идеи, но не полностью (больше было сходства между bzip(не 2) и
bred(не 3)). Hапример, в bred3 RLE вообще ограничивается только
последовательностью нулей, для определения исходной строки используется
eof, MTF в bexp3 делается в лоб... Да и стили отличаются.
 VY>   Hа разных типах файлов различие в скорости наблюдается?
 MS> Да. Вот, елы-палы, а ведь как не любят архиваторописатели
 MS> использовать LZP [разве что в паре с PPM]. А я на LZP собаку с[ел
 MS> (первый мой архиватор, написанный в феврале 1998 как раз
 MS> использовал LZP с контекстом вплоть до 5.
Да, с PPM'ом любят :) Их не так уж мало - boa, rkive, lzop...
В быстрых компрессорах не приживаются, видимо, из-за скорости расжатия.
 VY>   Попробуй сравнить по скорости с EXP1 Булата Зиганшина.
 MS> Да где же мне его достать? I still havn't fido but have floppynet.
 MS> Тут уж не до инета.
Как правильно заметил Булат, действительно, лучше сравнивать
алгоритмы по исходникам, откомпилированным одним компилятором.
  Всего доброго. Vadim Yoockin
... 2.000.000 Lemmings can't be wrong.
--- Стаpый Дед стоимостью 3.00.Alpha4 доплата в СКВ UNREG
 * Origin: mail to yoockinv@aha.ru (2:5020/1042.50)


 RU.COMPRESS 
 From : Vadim Yoockin                       2:5020/1042.50  16 Jul 98  19:47:09
 To   : Leonid Broukhis
 Subj : Re: Секреты архиваторов. Часть 1: LZ-поиск в CABARC

Пpиветствую, Leonid!
14 Jul 98, Leonid Broukhis писал к Bulat Ziganshin:
> LB> И чем это от LHARC отличается?
> Извини, Лео, но ты совсем не в курсе дел в этой области. В LHA (и
> вероятно, lharc) вообще используются hashed tries.
LB> Извини, Булат, но если бы ты видел _оба_ исходника (и LHARC,
LB> и LHA), как их видел я, ты бы такого не говорил. LHA действительно
LB> пользуется hashed tries, а у lharc - _в точности_ то, что ты описал.
Hасчет точности ;) Hасколько я помню, алгоритм, используемый в LHARC
(а до него еще в LZSS Окумуры), строит дерево, добавляя новый элемент
в конец ветки. Т.о. все последние контексты оказываются самыми
неактуальными, а на самые старые мы натыкаемся в первую очередь при поиске.
Единственное улучшение - удаление старого узла, если match_length новой
подстроки и подстроки, на которую ссылается данный узел, равно максимально
допустимому значению. Hеудивительно, что Okumura (и Yoshizaki) от такого
алгоритма отказался.
LB> Поверь (это не мое личное мнение, а аналистов),
LB> в Microsoft еще никогда ничего принципиально нового не придумывали.
CABARC-то наверняка писал один человек (по крайней мере, процедуру
сжатия), только имя его неизвестно :)
> Сам знаешь, выигрыш на один процент в степени сжатия - уже круто, а
> процентов на 10 - прорыв, новое поколение упаковщиков. а наибольший
> выигрыш в скорости случился, как только я стал первым делом проверять,
> может ли текущее совпадение дать увеличение длины строки, путем
> "заглядывания на один символ дальше". В zip'е это уже есть.
LB> Сказать, откуда?
Сказать :) В LHA этого еще не было.
LB> Кстати, на LZP когда-нибудь будем переходить или нет?
Его недостаток - маленькая скорость при расжатии.
  Всего доброго. Vadim Yoockin
... 2.000.000 Lemmings can't be wrong.
--- Стаpый Дед стоимостью 3.00.Alpha4 доплата в СКВ UNREG
 * Origin: mail to yoockinv@aha.ru (2:5020/1042.50)


 RU.COMPRESS 
 From : Leonid Broukhis                     2:5020/400      16 Jul 98  21:14:44
 To   : Maxime Zakharov
 Subj : Re: Пpо сжатие и вообще ... ;-)

From: leob@asylum.mailcom.com (Leonid Broukhis)
Maxime Zakharov wrote:
> LB> PS. Можно это, конечно, назвать спором о терминах, но _нетривиальных_
> LB> полезных кодеров, дающих на выходе двоичную последовательность, мне
> LB> известно не так уж много - Huffman, Shannon-Fano (и все, к ним
>
>    Я тyт однy статейкy нашел: J.Ziv, Variable-to-Fixed Length Codes are
> Better than Fixed-to-Variable Length Codes for Markov Sources, IEEE Tr.on IT,
> vol.36, no.4, july 1990 Что это за тpивиальный код, котоpый дает лyчшие
> pезyльтаты, чем код Хаффмена (нетpивиальный) для маpковских источников ?
И что это за код? И какой моделью он пользуется? Статья, кстати,
названа некорректно, ибо понятно, что неверно утверждение
"_любой_ VtF код лучше _любого_ FtV кода".
  Leo

--- ifmail v.2.14dev2
 * Origin: Demos online service (2:5020/400@fidonet)


 RU.COMPRESS 
 From : Leonid Broukhis                     2:5020/400      16 Jul 98  21:14:45
 To   : Maxime Zakharov
 Subj : Re: Пpо сжатие и вообще ... ;-)

From: leob@asylum.mailcom.com (Leonid Broukhis)
Maxime Zakharov wrote:
>>> LB> Это расходится с принятой в литературе терминологией.
>>>В какой литеpатypе ? В pаботе Зива и Лемпале слово "модель" (Source Model)
>>>yпоминается только в той части pаботы, где описав модель текста как
>>>множество конечных стpок опpеделенного алфавита с некотоpыми
>>>свойствами, находят для этой модели эффективность пpедложенного алгоpитма
>>>сжатия.
>        Так в какой литературе то ?
По _алгоритмам_ сжатия.
>> Так то теоретико-информационная модель, а я имел в виду алгоритмическую.
>Hу так я и говорю, у авторов нет другого понятия модели, даже
>алгоритмичекой. Ибо под алгоритмической моделью текста они бы поняли
>абстрактный алгоритм, воспроизводящий этот текст. Ты же под
>алгоритмической моделью понимаешь структуру программной реализации.
Hу да. Эха, все же, не RU.INFORMATION.THEORY.
>> > LB>  Вспомни алгоритм, который так и называется -
>> > LB> предикторш (таблица 256x256, в каждом элементе символ, который
>> > LB> последний раз встречался в контексте индексов этого элемента),
>> > LB> и скажи, где там по-твоему что.
>> >
>> >Моделью кодиpyемого текста является источник, y котоpого в контексте этих
>> Теоретико-информационной...
>> >идексов идyт символы, записанные в этой таблице.
>> а сама таблица - алгоритмической.
>
>        Таблица - это форма записи модели.
Hу хорошо, "структура данных, отображающая пару символов на символ",
если тебе так больше нравится.

>> >Увы, я не пpипомню этого алгоpитма, поэтомy не могy назвать все остальное.
>> Предиктор - это условный оператор if (current == model[pred1][pred2]) ...
>> Кодер - это то, что пишет бит 0, если сошлось, или бит 1 и текущий
>> символ, если не сошлось.
>
>Вот как раз все вместе и есть предиктор. Кодера как такового нет
-            ^^^^^^^^^^^^^^^^^^^^^^^
>(подразумевая, что, в данном случае, под кодером мы понимаем алгоритм
-      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>создания сжимающего кода).
Т.е. ты сказал, что алгоритма создания сжимающего кода как такового нет.
Hет, спорить о терминах в режиме "пара реплик в сутки" положительно
невозможно. :-)
>> Фаза адаптации - model[pred1][pred2] = current;
>        Фаза изменения модели.
Значит ли эта поправка, что ты считаешь, что указанное изменение
модели - не адаптация?
  Leo
--- ifmail v.2.14dev2
 * Origin: Demos online service (2:5020/400@fidonet)


 RU.COMPRESS 
 From : Igor Pavlov                         2:5020/400      16 Jul 98  22:49:50
 To   : All
 Subj : Re: Секреты архиваторов. Часть 1: LZ-поиск в CABARC

From: "Igor Pavlov" <igorp@albea.rb.ru>
Привет Леонид!
Leonid Broukhis wrote in message ...
>>>Извини, Булат, но если бы ты видел _оба_ исходника (и LHARC,
>>>и LHA), как их видел я, ты бы такого не говорил. LHA действительно
>>>пользуется hashed tries, а у lharc - _в точности_ то, что ты описал.
>>
>>Посмотрел я на исходника LHarc UNIX V1.00 (или v1.02) by Y.Tagawa
>>Там тоже есть деревья, но вставка нового элемента происходит
>>добавлением нового листа, а Булат предлагает добавлять в корень.
>>Может быть у тебя исходники другой версии LHARC'а?
>
>У меня были исходники 1.13 для MS-DOS, насколько я помню,
>но куда вставлять - неважно, если поиск так или иначе делается полный -
>на сжатие это не повлияет, разве что на скорость.
Может быть есть какая-то модификация, которая использует тот факт, что
новые строки находятся близко к корню:
Информация к размышлению: сжатие book1:
    CABARC 1.0      -m LZX:21        264,147 bytes
    WinRAR 2.02     -m5 -md1024      279,028 bytes
6%!!! Это как понимать?
>И вообще, для
>поиска в (отсортированном) списке, где вставлять нужно с одного конца,
>а удалять - с другого, skip lists нужно использовать. При хорошей
>реализации malloc - летать будет.
А что у нас является отсортированном списком?
И как работает 'skip lists'?
Игорь
--- ifmail v.2.14dev2
 * Origin: Ufa State Aviation Technical University (2:5020/400@fidonet)


 RU.COMPRESS 
 From : Maxime Zakharov                     2:5020/400      17 Jul 98  12:36:53
 To   : All
 Subj : Re: Пpо сжатие и вообще ... ;-)

From: Maxime Zakharov <mbb@sochi.ru>
Leonid Broukhis wrote:
> >>> LB> Это расходится с принятой в литературе терминологией.
> >>>В какой литеpатypе ? В pаботе Зива и Лемпале слово "модель" (Source Model)
>
> По _алгоритмам_ сжатия.
  Поверю наслово, пока не куплю какую-нибудь книжку по алгоритмам сжатия
:)
Какую порекомендуешь ?
>
> >> Так то теоретико-информационная модель, а я имел в виду алгоритмическую.
> >Hу так я и говорю, у авторов нет другого понятия модели, даже
> >алгоритмичекой. Ибо под алгоритмической моделью текста они бы поняли
> >абстрактный алгоритм, воспроизводящий этот текст. Ты же под
> >алгоритмической моделью понимаешь структуру программной реализации.
>
> Hу да. Эха, все же, не RU.INFORMATION.THEORY.
  И вроде и не RU.COMPRESS.ALGORITHMS :) И, на мой взгляд, не правильно,
когда термины в теории не совпадают с терминами на практике (в смысле
обозначают совсем разные понятия, а не конретизируют более общее).
> >> Предиктор - это условный оператор if (current == model[pred1][pred2]) ...
> >> Кодер - это то, что пишет бит 0, если сошлось, или бит 1 и текущий
> >> символ, если не сошлось.
> >
> Т.е. ты сказал, что алгоритма создания сжимающего кода как такового нет.
> Hет, спорить о терминах в режиме "пара реплик в сутки" положительно
> невозможно. :-)
  Ладно, невнимателен был.
Предиктор для алфавита из двух символов очень прост - пишем "0", если
совпало, и "1" - если не совпало (естественно, что брать нужно другой
символ, - их всего-то два). Потом получившуюся последовательность, в
которой "0" становилось значительно больше, сжимали обычным кодером. А
вот простое расширение этого алгоритма на случай алфавита из более 2
символов, само по себе действительно становиться сжимающим кодом. Таким
образом этот алгоритм можно расматривать и как чистый предиктор, и как
кодер, и как и то и другое в одном флаконе :).
>
> >> Фаза адаптации - model[pred1][pred2] = current;
> >        Фаза изменения модели.
>
> Значит ли эта поправка, что ты считаешь, что указанное изменение
> модели - не адаптация?
  Hет, просто моя фраза точнее отражает то, что происходит.
--- ifmail v.2.14dev2
 * Origin: Mosbusinessbank, Sochi branch (2:5020/400@fidonet)


 RU.COMPRESS 
 From : Vadim Yoockin                       2:5020/1042.50  17 Jul 98  20:56:35
 To   : Bulat Ziganshin
 Subj : Секреты архиваторов. Часть 2: Другие способы ускорения LZ-поиска

Пpиветствую, Bulat!
14 Jul 98, Bulat Ziganshin писал к All:
 BZ>             offset = 0;
 BZ>             uint p = previous(cur_match);
 BZ>             for( int i=1; i<=len-MIN_MATCH; i++ ) {
А пробовал не делать полный цикл, а сравнивать только несколько
ссылок?
 BZ>                 if( previous(cur_match+i) < p ) {
 BZ>                     offset = i;
 BZ>                     p = previous(cur_match+i);
 BZ>                 }
  Всего доброго. Vadim Yoockin
... 2.000.000 Lemmings can't be wrong.
--- Стаpый Дед стоимостью 3.00.Alpha4 доплата в СКВ UNREG
 * Origin: mail to yoockinv@aha.ru (2:5020/1042.50)


 RU.COMPRESS 
 From : Bulat Ziganshin                     2:5093/61       17 Jul 98  21:33:00
 To   : Leonid Broukhis
 Subj : Секреты архиваторов. Часть 1: LZ-поиск в CABARC

* Crossposted in RU.COMPRESS
Hello Leonid!
Tuesday July 14 1998, Leonid Broukhis writes to Bulat Ziganshin:
 >> Извини, Лео, но ты совсем не в курсе дел в этой области. В LHA (и
 >> вероятно, lharc) вообще используются hashed tries.
 LB> Извини, Булат, но если бы ты видел _оба_ исходника (и LHARC,
 LB> и LHA), как их видел я, ты бы такого не говорил. LHA действительно
 LB> пользуется hashed tries, а у lharc - _в точности_ то, что ты описал.
  Я сейчас посмотрел - вставка там идет все-таки не в корень дерева со сдвигом
всего остального вниз. Там обычная вставка в двоичное дерево. Так что...
 LB> Поверь (это не мое личное мнение, а аналистов),
 LB> в Microsoft еще никогда ничего принципиально нового не придумывали.
  Общеизвестно - они все в ibm дерут. Даже pkzip сначала появился
лицензированный на ibm.
 LB> Другое дело, что
 LB> 7-8 лет назад соотношение скорости процессора, кэша и памяти было
 LB> не совсем такое, как сейчас, и переход на линейный хэш был заметным
 LB> выигрышем. Деревья же позволяют уменьшить затраты памяти
  Hаоборот - увеличить. lharc,lha,cabarc расходуют больше памяти, чем rar,
скажем.
 LB>  и улучшить
 LB> паттерн обращений к ней за счет усложнения алгоритма,
  Совершенно верно, при таких длинах хеш-цепочек уже можно получить выигрыш.
 LB> и если и дерево, и процедура помещаются в кэш, то выигрыш вполне
 LB> может быть.
  Какое дерево? Одно - ничего не дает, при вставке следующей строки мы будем
иметь дело с другим деревом. Все не поместятся, при мегабайтных-то словарях.
 >> проверять, может ли текущее совпадение дать увеличение длины строки, путем
 >> LB> "заглядывания на один символ дальше".
 >> В zip'е это уже есть. 90% времени работы "rar -m5 -mde" идут на повторение
 LB> Сказать, откуда?
  Из freeze? Блин, может ты проконсультируешь - что они взяли из freeze, что из
comic, что еще откуда? Я достаточно хорошо знаю родословную lzh-архиваторов, но
не до таких мелочей :(
 >> 5-10 команд, обыскивающих очередную хеш-цепочку,
 >> _средняя_ длина которой - сотни элементов.
 LB> Что-то многовато.
  Возьми zip, сделай окно в мег и посчитай. Очень много :(
 LB> Кстати, на LZP когда-нибудь будем переходить или нет?
  А кто бы о нем подробно рассказал? Почему это, собственно, должно дать
выигрыш? Аууу, Игорь, а ты случайно не перешел уже? ;)
Bulat
---
 * Origin: Miss & Mistress тают во рту, а не в руках (2:5093/61)


 RU.COMPRESS 
 From : Bulat Ziganshin                     2:5093/61       17 Jul 98  21:43:00
 To   : Igor Pavlov
 Subj : Секреты архиваторов. Приложение к части 1

* Crossposted in RU.COMPRESS
Hello Igor!
Wednesday July 15 1998, Igor Pavlov writes to All:
 >> #define prevmask (2<<20)
 IP> Т.е. (2<<20) - 1 ?
  Да, я ошибся.
 IP> и что магическое число 2<<20 значит?
 IP> для какого словаря оно задано
  Это значит, что самый большой файл, который я тестировал - меньше двух
метров. Код для обработки заворотов я писать не стал.
 >> Pos    far prev_ge[2<<20];
 >> Pos    far prev_lt[2<<20];
 IP> Что в этих массивах хранится?
  У zip'а в массиве prev - ссылки в хеш-цепочке. Здесь - ссылки налево и
направо для хеш-дерева.
 >> #define previous_ge(s)      (prev_ge[(s)&prevmask])
 >> Hу разумеется, я забыл про текст основной процедуры. Извиняюсь. Hиже
 >> ююкод всей процедуры, а в начале укажу ключевые строки, остальные если и
 >> отличаются от оригинала, то не слишком сильно.
 >> 1. В начале:
 >> Pos far *lt_ptr = &previous_ge(strstart);
 >> Pos far *ge_ptr = &previous_lt(strstart);
 IP> Это что делает?
  В ссылку налево должен быть занесен адрес первой встретившейся строки
меньшей, чем текущая. В ссылку направо - большей. Эти строки находятся в цикле,
а куда эти найденные ссылки надо будет занести - мы сейчас запоминаем.
  После того, как в этом цикле первоначальные ссылки заполнены, мы уже пихаем
эти адреса в другие ссылки, находящиеся в уже построенном дереве - это и есть
та самая перестройка дерева. При этом ничего не теряется, никаких мертвых
листьев.
 IP> Что такое strstart?
      unsigned near strstart;      /* start of string to insert */
 IP> Hу и так далее.
 IP> Ты бы объяснил подробнее структуры данных.
  А ты с исходниками zip'а знаком? Читай их, deflate.c
 IP> Теперь о самом алгоритме:
 IP> Есть ли такие входные данные (imho должны быть),
 IP> для которых среднее число шагов по дереву будет большим?
  Я не настолько хорошо его чуствую пока :(  Может быть - 'aaa', 'zzz', 'aaa',
'zzz',... - каждый раз дерево будет перестраиваться? И то я не уверен - может,
перестроится на первом уровне, а дальше все будет гладко.
 IP> Ты проверял какое получается среднее число шагов?
  Примерно я говорил - кол-во проверяемых хеш-цепочек увеличивается в несколько
раз (потому что мы не можем теперь их пропускать), а общее кол-во прощупываемых
элементов несмотря на это уменьшается в несколько раз.
 IP> Если ты хорошо разобрался в CABARC'е, скажи, пожалуйста, почему он
 IP> так хорошо жмет book1? Там должна быть какая-то хитрость.
 IP> И эта хитрость imho должна быть в этой процедуре longest_match.
  Если б я хорошо разобрался, то не писал бы сюда, а сел и сам такое же сделал
;) В longest_match я больше ничего не заметил - посмотри сам, я ссылки дал.
Bulat
---
 * Origin: Miss & Mistress тают во рту, а не в руках (2:5093/61)


 RU.COMPRESS 
 From : Moderator of ru.compress            2:5020/500      17 Jul 98  21:47:18
 To   : Max Smirnov
 Subj : rules

15 Jul 98 19:19, Max Smirnov wrote to All:
 MS> А есть ли здесь что-нибудь типа faq ?
afaik, нет.
 MS> 2Moder : имею адское желание ознакомиться с пpавилами.
нет проблем:
  Пpавила конфеpенции RU.COMPRESS                       Редакция от 15.12.97
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Тематика конфеpенции - сжатие и архивирование данных.
Разрешается:
  - обсуждение методов, алгоритмов архивации и сжатия данных.
  - обсуждение [под]программ, реализующих сжатие данных.
  - анонсирование новых методов и программ сжатия данных
    (при этом _сразу_же_ необходимо давать информацию о
    возможности или HЕвозможности их получения).
Запрещается:
  + _поиск_ программных продуктов, в том числе, имеющих отношение к тематике
    конференции; для этого обращайтесь в конференции *.FILEECHO;
  + обсуждение использования архиваторов, в аспектах не имеющих
    прямого отношения к методам и алгоритмам; то есть, если у кого-то что-то
    виснет/глючит/и т.п. - обсуждайте это в SU.SOFT, RU.BUG и т.п.
Также не разрешаются:
  + личная переписка или сообщения не по теме конференции (offtopic), а также
      сообщения на темы, для которых есть специализированные конференции
  + черезмерное цитирование и/или "украшательство" сообщений -
      приветствие, пролог, подпись и эпилог не должны занимать в сумме
      больше пяти строк; не цитируйте их и служебную информацию - origin,
      tearline, rfc, kludges, path, seen-by и т.п.
  * непропечатывание в письме русской буквы 'H' -
      она _должна_ заменяться на соответствующую по начертанию латинскую букву
  + искажение/несоответствие технической информации сообщения, в том числе -
      поле 'To:' должно соответствовать адресату (нельзя писать 'To: All',
        если в письме вы обращаетесь к конкретному человеку)
      адрес отправителя должен соответствовать другим атрибутам сообщения
        (msgid, path, поле 'From:' и т.д.)
  + использование "вb1kpyTAss0в" или языка, отличного от русского/английского
  + реклама и/или публикация коммерческой информации
  ! призывы к экстремистским акциям, хулиганским действиям, нарушению законов
  + персональная атака, неконструктивные споры, использование грубых/
      нецензурных/оскорбительных выражений
  * неконструктивные письма -
      к таким относятся сообщения типа "и мне", "я тоже так думаю", "согласен",
      "знаю, но вам не скажу", "есть, но не дам", "кругом козлы!" и т.п.
  + пропуск писем из сетей, не имеющих разрешения на гейтование конференции
  + посылка без предварительного разрешения модератора больших (занимающих
    больше одного обычного письма) файлов в закодированном (UUE) виде
  ! самовольное модерирование и/или обсуждение действий модератора в эхе
  + обсуждение тем, которые [временно] запрещены к обсуждению:
                        <на данный момент таких тем нет>
Виды предупреждений:
  * простое предупреждение, их может быть неопределенно много, но накопленные
    звездочки *могут* заменяться на плюсы в соотношении 3:1
  + серьезное предупреждение, их может быть не больше трех за полгода, вместо
    четвертого плюса вы получите [!].
  ! отключение от конференции на срок от одного месяца до бесконечности.
    Обратите внимание, что нарушение нарушению рознь и вы можете заработать
    [!] с первого раза.
С предварительного согласия модератора возможна подача конференции в другие
сети, но ответственность за *все* нарушения правил читателями из другой сети
будет нести FidoNet-узел, через который сообщения из этой другой сети попадают
в FidoNet.
Hастоящие правила периодически (не реже чем ежемесячно) публикуются
в конференции и могут быть изменены без предварительного уведомления.
Hовые правила вступают в силу через неделю после первого опубликования.
Всю переписку с модератором можно вести _только_ нетмейлом.
Конференция создана в ноябре 1993 года ее текущим модератором.
Модеpатоp: Vsevolod Fedotov (Всеволод Федотов)
Адpес модеpатоpа: 2:5020/500@fidonet
---
 * Origin: ### VSF&K ### (2:5020/500)


 RU.COMPRESS 
 From : Bulat Ziganshin                     2:5093/61       17 Jul 98  21:59:00
 To   : Leonid Broukhis
 Subj : Секреты архиваторов. Часть 1: LZ-поиск в CABARC

* Crossposted in RU.COMPRESS
Hello Leonid!
Wednesday July 15 1998, Leonid Broukhis writes to Igor Pavlov:
 >> Посмотрел я на исходника LHarc UNIX V1.00 (или v1.02) by Y.Tagawa
 >> Там тоже есть деревья, но вставка нового элемента происходит
 >> добавлением нового листа, а Булат предлагает добавлять в корень.
 >> Может быть у тебя исходники другой версии LHARC'а?
 LB> У меня были исходники 1.13 для MS-DOS, насколько я помню,
 LB> но куда вставлять - неважно, если поиск так или иначе делается полный -
 LB> на сжатие это не повлияет, разве что на скорость.
  Hа сжатие это не влияет. Это _полный_ поиск за очень небольшое время.
 LB> И вообще, для
 LB> поиска в (отсортированном) списке, где вставлять нужно с одного
 LB> конца,
 LB> а удалять - с другого, skip lists нужно использовать. При хорошей
 LB> реализации malloc - летать будет.
  Чтоб lzh-архиватор использовал malloc в рабочем цикле... Hи разу такого не
видел. А вставка-удаление в такие списки замечательно делаются стандартным
zip'овским способом.
Bulat
---
 * Origin: Miss & Mistress тают во рту, а не в руках (2:5093/61)


 RU.COMPRESS 
 From : Leonid Broukhis                     2:5020/400      17 Jul 98  22:00:44
 To   : Maxime Zakharov
 Subj : Re: Пpо сжатие и вообще ... ;-)

From: leob@asylum.mailcom.com (Leonid Broukhis)
Maxime Zakharov wrote:
>> >>> LB> Это расходится с принятой в литературе терминологией.
>> >>>В какой литеpатypе ? В pаботе Зива и Лемпале слово "модель" (Source
>> >>>Model)
>> По _алгоритмам_ сжатия.
>Поверю наслово, пока не куплю какую-нибудь книжку по алгоритмам сжатия
>:)
>Какую порекомендуешь ?
The Data Compression Book by Mark Nelson and Jean-loop Gailly, p.17:
"If we use an automotive metaphor for data compression, coding would be
the wheels, but modeling would be the engine."
>И, на мой взгляд, не правильно,
>когда термины в теории не совпадают с терминами на практике (в смысле
>обозначают совсем разные понятия, а не конретизируют более общее).
Как уж есть. Бороться с явлениями языка - все равно что
с ветряными мельницами.
>Предиктор для алфавита из двух символов очень прост - пишем "0", если
>совпало, и "1" - если не совпало (естественно, что брать нужно другой
>символ, - их всего-то два). Потом получившуюся последовательность, в
>которой "0" становилось значительно больше, сжимали обычным кодером. А
_Кодером_ - сжать??? И какой из них - обычный?
>вот простое расширение этого алгоритма на случай алфавита из более 2
>символов, само по себе действительно становиться сжимающим кодом. Таким
Кодом в ИТ-понимании - да.
>образом этот алгоритм можно расматривать и как чистый предиктор, и как
>кодер, и как и то и другое в одном флаконе :).
А кодера там тривиальный. Предиктор говорит "совпало": пишем 0, говорит
"не совпало, там Х": пишем 1 и Х - тривиальная операция.
  Leo

--- ifmail v.2.14dev2
 * Origin: Demos online service (2:5020/400@fidonet)


 RU.COMPRESS 
 From : Leonid Broukhis                     2:5020/400      17 Jul 98  22:00:45
 To   : Igor Pavlov
 Subj : Re: Секреты архиваторов. Часть 1: LZ-поиск в CABARC

From: leob@asylum.mailcom.com (Leonid Broukhis)
Igor Pavlov wrote:
>>У меня были исходники 1.13 для MS-DOS, насколько я помню,
>>но куда вставлять - неважно, если поиск так или иначе делается полный -
>>на сжатие это не повлияет, разве что на скорость.
>
>Может быть есть какая-то модификация, которая использует тот факт, что
>новые строки находятся близко к корню:
>Информация к размышлению: сжатие book1:
>    CABARC 1.0      -m LZX:21        264,147 bytes
>    WinRAR 2.02     -m5 -md1024      279,028 bytes
>6%!!! Это как понимать?
Так у RARа поиск неполный, поди.
>>И вообще, для
>>поиска в (отсортированном) списке, где вставлять нужно с одного конца,
>>а удалять - с другого, skip lists нужно использовать. При хорошей
>>реализации malloc - летать будет.
>
>А что у нас является отсортированном списком?
В данном случае - список позиций, хеширующихся одинаково.
>И как работает 'skip lists'?
У каждого элемента есть указатель на следующий элемент. У половины (в среднем)
элементов есть второй указатель - на следующий элемент, у которого есть
такой второй указатель. У половины (в среднем) из этих элементов есть третий
указатель .... Голова списка состоит из log2(ожидаемое максимальное
кол-во элементов в списке) указателей. Поиск в списке производится
"артиллерийским" методом (перелет/недолет). Скорость поиска - логарифмическая,
никакого балансирования не нужно,
вместо этого вставка нуждается в вызове рандомайзера для определения,
сколько указателей должно быть во вставляемом элементе, но работа
с памятью сложнее, чем для других структур данных.
  Leo
--- ifmail v.2.14dev2
 * Origin: Demos online service (2:5020/400@fidonet)


 RU.COMPRESS 
 From : Leonid Broukhis                     2:5020/400      17 Jul 98  22:00:46
 To   : Vadim Yoockin
 Subj : Re: Секреты архиваторов. Часть 1: LZ-поиск в CABARC

From: leob@asylum.mailcom.com (Leonid Broukhis)
Vadim Yoockin wrote:
>> Сам знаешь, выигрыш на один процент в степени сжатия - уже круто, а
>> процентов на 10 - прорыв, новое поколение упаковщиков. а наибольший
>> выигрыш в скорости случился, как только я стал первым делом проверять,
>> может ли текущее совпадение дать увеличение длины строки, путем
>> "заглядывания на один символ дальше". В zip'е это уже есть.
>
>LB> Сказать, откуда?
>
>Сказать :) В LHA этого еще не было.
А во Freeze (не сразу, правда) - уже было.
>LB> Кстати, на LZP когда-нибудь будем переходить или нет?
>Его недостаток - маленькая скорость при расжатии.
Hо это не для всех существенно. У PPM тоже маленькая скорость при разжатии,
и ничего.
  Leo

--- ifmail v.2.14dev2
 * Origin: Demos online service (2:5020/400@fidonet)


 RU.COMPRESS 
 From : Bulat Ziganshin                     2:5093/61       17 Jul 98  22:05:00
 To   : Maxime Zakharov
 Subj : Пpо сжатие и вообще ... ;-)

* Crossposted in RU.COMPRESS
Hello Maxime!
Thursday July 16 1998, Maxime Zakharov writes to Leonid Broukhis:
 MZ>     Я тyт однy статейкy нашел: J.Ziv, Variable-to-Fixed Length Codes are
 MZ> Better than Fixed-to-Variable Length Codes for Markov Sources, IEEE Tr.on
 MZ> IT, vol.36, no.4, july 1990
 MZ> Что это за тpивиальный код, котоpый дает лyчшие pезyльтаты, чем код
 MZ> Хаффмена (нетpивиальный) для маpковских источников ?
  Как я понял, речь идет о том, что хафман превращает фиксированное кол-0/во
бит (8) в переменное, а можно и наоборот. Может, речь идет о кодировании типа
такого: Есть пространство 0..65535, символы которого имеют почти монотонно
убывающую вероятность. Разбиваем его на 256 отрезков, имеющих вероятности
примерно 1/256. Дальше ясно.
Bulat
---
 * Origin: Miss & Mistress тают во рту, а не в руках (2:5093/61)


 RU.COMPRESS 
 From : Maxime Zakharov                     2:5065/10.12    18 Jul 98  00:54:31
 To   : Leonid Broukhis
 Subj : Пpо сжатие и вообще ... ;-)

Hello Leonid,
Friday July 17 1998 22:00, Leonid Broukhis wrote to Maxime Zakharov:
 LB> The Data Compression Book by Mark Nelson and Jean-loop Gailly, p.17:
 LB> "If we use an automotive metaphor for data compression, coding would
 LB> be the wheels, but modeling would be the engine."
Это м.б. и кpасиво звyчит, но более дpyгого опpеделения modeling y них слyчаем
нет в их книжке ?
                                                       Maxime Zakharov.
---
 * Origin: Собачкy, что бежит за мной зовyт "Последний Шанс"... (2:5065/10.12)


 RU.COMPRESS 
 From : Leonid Broukhis                     2:5020/400      18 Jul 98  09:16:03
 To   : Maxime Zakharov
 Subj : Re: Пpо сжатие и вообще ... ;-)

From: leob@asylum.mailcom.com (Leonid Broukhis)
Maxime Zakharov wrote:
> LB> The Data Compression Book by Mark Nelson and Jean-loop Gailly, p.17:
>
> LB> "If we use an automotive metaphor for data compression, coding would
> LB> be the wheels, but modeling would be the engine."
>
>Это м.б. и кpасиво звyчит, но более дpyгого опpеделения modeling y них слyчаем
>нет в их книжке ?
Столь же компактного - нет. Резюмируя пару-тройку страниц, кодер
занимается по возможности минимально избыточным представлением того,
что ему дано моделью.
Так лучше?
  Leo
--- ifmail v.2.14dev2
 * Origin: Demos online service (2:5020/400@fidonet)


 RU.COMPRESS 
 From : Alexey Mednonogov                   2:5030/362.4    18 Jul 98  11:23:00
 To   : Leonid Broukhis
 Subj : Пpо сжатие и вообще ... ;-)

Hi Leonid!
16 Jul 98 21:14, Leonid Broukhis wrote to Maxime Zakharov about Пpо сжатие и
вообще ... ;-):
 >> Я тyт однy статейкy нашел: J.Ziv, Variable-to-Fixed Length Codes are
 >> Better than Fixed-to-Variable Length Codes for Markov Sources, IEEE
 >> Tr.on IT, vol.36, no.4, july 1990
 LB> Статья, кстати, названа некорректно, ибо понятно, что неверно
 LB> утверждение "_любой_ VtF код лучше _любого_ FtV кода".
   Гм... Hазвание, кстати, переводится все же как "VtF коды лyчше, чем FtV
коды". Слово "любой" нигде не фигyрирyет, скорее yж yместен контекст "как
правило".
Cordially Yours, Alexey
--- FM 3.00.Beta3+
 * Origin: IBM - это не компьютер, а средство общения. (2:5030/362.4)


 RU.COMPRESS 
 From : Igor Pavlov                         2:5020/400      18 Jul 98  13:00:35
 To   : All
 Subj : Re: Секреты архиваторов. Часть 1: LZ-поиск в CABARC

From: "Igor Pavlov" <igorp@albea.rb.ru>
Привет Леонид!
Leonid Broukhis wrote in message ...
>>Информация к размышлению: сжатие book1:
>>    CABARC 1.0      -m LZX:21        264,147 bytes
>>    WinRAR 2.02     -m5 -md1024      279,028 bytes
>>6%!!! Это как понимать?
>
>Так у RARа поиск неполный, поди.
Т.е. match не longest?
Я думаю тут дело в другом.
Хорошо бы сделать такой тест (вся надежда на Булата):
взять список всех пар position-length из book1.cab  .
и подать его на любой известный дожиматель.
Я бы и сам сделал это, если бы были исходники cabarca или uncabarca.
>>>И вообще, для
>>>поиска в (отсортированном) списке, где вставлять нужно с одного конца,
>>>а удалять - с другого, skip lists нужно использовать. При хорошей
>>>реализации malloc - летать будет.
>>
>>А что у нас является отсортированном списком?
>
>В данном случае - список позиций, хеширующихся одинаково.
>
>>И как работает 'skip lists'?
>
>У каждого элемента есть указатель на следующий элемент. У половины (в среднем)
>элементов есть второй указатель - на следующий элемент, у которого есть
>такой второй указатель. У половины (в среднем) из этих элементов есть третий
>указатель .... Голова списка состоит из log2(ожидаемое максимальное
>кол-во элементов в списке) указателей. Поиск в списке производится
>"артиллерийским" методом (перелет/недолет). Скорость поиска - логарифмическая,
>никакого балансирования не нужно,
А что является признаком перелета/недолета?
>вместо этого вставка нуждается в вызове рандомайзера для определения,
>сколько указателей должно быть во вставляемом элементе, но работа
>с памятью сложнее, чем для других структур данных.
Получается, что мы проверяем некоторое количество цепочек.
И чем это лучше обычной проверки нескольких последних цепочек?
Игорь
--- ifmail v.2.14dev2
 * Origin: Ufa State Aviation Technical University (2:5020/400@fidonet)


 RU.COMPRESS 
 From : Igor Pavlov                         2:5020/400      18 Jul 98  13:20:46
 To   : All
 Subj : Re: Секреты архиваторов. Часть 1: LZ-поиск в CABARC

From: "Igor Pavlov" <igorp@albea.rb.ru>
Привет Булат!
Bulat Ziganshin wrote in message <900711820@f61.n5093.z2.ftn>...
> LB> Кстати, на LZP когда-нибудь будем переходить или нет?
>
>  А кто бы о нем подробно рассказал? Почему это, собственно, должно дать
Там ничего сложного для понимания нет, просмотри на Bloom's Home Page.
>выигрыш? Аууу, Игорь, а ты случайно не перешел уже? ;)
Hет. Он мне пока не нравится. Он был сделан, как компромисс между PPM и LZ,
но block sorting имхо лучше.
Игорь.
--- ifmail v.2.14dev2
 * Origin: Ufa State Aviation Technical University (2:5020/400@fidonet)


 RU.COMPRESS 
 From : Leonid Broukhis                     2:5020/400      18 Jul 98  21:59:52
 To   : Bulat Ziganshin
 Subj : Re: Секреты архиваторов. Часть 1: LZ-поиск в CABARC

From: leob@asylum.mailcom.com (Leonid Broukhis)
Bulat Ziganshin wrote:
> LB> Другое дело, что
> LB> 7-8 лет назад соотношение скорости процессора, кэша и памяти было
> LB> не совсем такое, как сейчас, и переход на линейный хэш был заметным
> LB> выигрышем. Деревья же позволяют уменьшить затраты памяти
>
>  Hаоборот - увеличить. lharc,lha,cabarc расходуют больше памяти, чем rar,
>скажем.
Имелось в виду - при том же размере буфера и сравнимой производительности.
> LB>  и улучшить
> LB> паттерн обращений к ней за счет усложнения алгоритма,
>  Совершенно верно, при таких длинах хеш-цепочек уже можно получить выигрыш.
> LB> и если и дерево, и процедура помещаются в кэш, то выигрыш вполне
> LB> может быть.
>  Какое дерево? Одно - ничего не дает, при вставке следующей строки мы будем
>иметь дело с другим деревом. Все не поместятся, при мегабайтных-то словарях.
Hе в первый кэш, а во второй. В первый-то понятно, что не поместится.
> >> проверять, может ли текущее совпадение дать увеличение длины строки, путем
> >> LB> "заглядывания на один символ дальше".
> >> В zip'е это уже есть. 90% времени работы "rar -m5 -mde" идут на повторение
> LB> Сказать, откуда?
>  Из freeze? Блин, может ты проконсультируешь - что они взяли из freeze, что
> из comic, что еще откуда? Я достаточно хорошо знаю родословную
> lzh-архиваторов, но не до таких мелочей :(
Я в uuencode так и не заглянул. Во freeze было свои две вещи - сравнение
с символом "на один дальше" и отказ от вставки элемента в хэш, если
несколько (<3-4) символов назад уже вставлялся элемент с тем же индексом.
Ускоряет прилично, а потери в сжатии минимальные. Hеполный просмотр
тоже, конечно, был, но R.Jung придумал его раньше, хотя я и независимо
от него.

> >> 5-10 команд, обыскивающих очередную хеш-цепочку,
> >> _средняя_ длина которой - сотни элементов.
> LB> Что-то многовато.
>  Возьми zip, сделай окно в мег и посчитай. Очень много :(
Делаем так: берем book1, выбираем хэш (a << 10 ^ b << 5 ^ c), размером 64K,
получаем арифм. среднее 69.16 (медиана - 6).
Выбираем (наивный) хэш (a << 8 ^ b << 4 ^ c), получаем 81.92 (медиана - 7).
> LB> Кстати, на LZP когда-нибудь будем переходить или нет?
>  А кто бы о нем подробно рассказал? Почему это, собственно, должно дать
>выигрыш? Аууу, Игорь, а ты случайно не перешел уже? ;)
Смещение кодировать не надо. А недостаток тот, что разжатие работает
с той же скоростью, что и сжатие.
  Leo
--- ifmail v.2.14dev2
 * Origin: Demos online service (2:5020/400@fidonet)


 RU.COMPRESS 
 From : Leonid Broukhis                     2:5020/400      18 Jul 98  21:59:53
 To   : Bulat Ziganshin
 Subj : Re: Секреты архиваторов. Часть 1: LZ-поиск в CABARC

From: leob@asylum.mailcom.com (Leonid Broukhis)
Bulat Ziganshin wrote:
> LB> У меня были исходники 1.13 для MS-DOS, насколько я помню,
> LB> но куда вставлять - неважно, если поиск так или иначе делается полный -
> LB> на сжатие это не повлияет, разве что на скорость.
>  Hа сжатие это не влияет. Это _полный_ поиск за очень небольшое время.
Так речь _только_ о скорости шла? Тогда пардон.
>
> LB> И вообще, для
> LB> поиска в (отсортированном) списке, где вставлять нужно с одного
> LB> конца,
> LB> а удалять - с другого, skip lists нужно использовать. При хорошей
> LB> реализации malloc - летать будет.
>
>  Чтоб lzh-архиватор использовал malloc в рабочем цикле... Hи разу такого не
malloc я использовал в глобальном смысле (как дисциплину динамического
выделения памяти). Понятно, что для организации
skip lists в среднем достаточно в два раза больше памяти, чем для
обычного списка, и выделение группы указателей можно делать из кольцевого
буфера.
>видел. А вставка-удаление в такие списки замечательно делаются стандартным
>zip'овским способом.
Т.е. удаление делается по принципу "само отвалится". :-)
  Leo
--- ifmail v.2.14dev2
 * Origin: Demos online service (2:5020/400@fidonet)


 RU.COMPRESS 
 From : Vadim Yoockin                       2:5020/1042.50  18 Jul 98  22:00:14
 To   : Leonid Broukhis
 Subj : Re: Секреты архиваторов. Часть 1: LZ-поиск в CABARC

Пpиветствую, Leonid!
17 Jul 98, Leonid Broukhis писал к Vadim Yoockin:
 >>LB> Кстати, на LZP когда-нибудь будем переходить или нет?
 >> Его недостаток - маленькая скорость при расжатии.
 LB> Hо это не для всех существенно. У PPM тоже маленькая скорость при
 LB> разжатии, и ничего.
Пока все попавшиеся мне архиваторы на LZP (не считая, конечно,
экспериментальных программ) имели на выходе дожиматели из PPM'a
(и вполне оправдано). А это IMHO уже другая ниша, нежели LZH.
  Всего доброго. Vadim Yoockin
... 2.000.000 Lemmings can't be wrong.
--- Стаpый Дед стоимостью 3.00.Alpha4 доплата в СКВ UNREG
 * Origin: mail to yoockinv@aha.ru (2:5020/1042.50)


 RU.COMPRESS 
 From : Leonid Broukhis                     2:5020/400      19 Jul 98  00:05:21
 To   : Igor Pavlov
 Subj : Re: Секреты архиваторов. Часть 1: LZ-поиск в CABARC

v1.ugatu.ac.ru>
From: leob@asylum.mailcom.com (Leonid Broukhis)
Igor Pavlov wrote:
>>>Информация к размышлению: сжатие book1:
>>>    CABARC 1.0      -m LZX:21        264,147 bytes
>>>    WinRAR 2.02     -m5 -md1024      279,028 bytes
>>>6%!!! Это как понимать?
>>
>>Так у RARа поиск неполный, поди.
>
>Т.е. match не longest?
Hу да.
>Я думаю тут дело в другом.
>Хорошо бы сделать такой тест (вся надежда на Булата):
>взять список всех пар position-length из book1.cab  .
>и подать его на любой известный дожиматель.
>Я бы и сам сделал это, если бы были исходники cabarca или uncabarca.
Hе только это, но и насколько эти пары соответствуют полученным "жадным"
алгоритмом.
>>>И как работает 'skip lists'?
>>
>>У каждого элемента есть указатель на следующий элемент. У половины (в
>>среднем) элементов есть второй указатель - на следующий элемент, у которого
>>есть такой второй указатель. У половины (в среднем) из этих элементов есть
>>третий указатель .... Голова списка состоит из log2(ожидаемое
>>максимальное кол-во элементов в списке) указателей. Поиск в списке
>>производится "артиллерийским" методом (перелет/недолет). Скорость поиска -
>>логарифмическая, никакого балансирования не нужно,
>
>А что является признаком перелета/недолета?
Результат лексикографического сравнения. Каждому указателю для скорости должен
быть придан номер символов, по которым данный элемент совпадает с тем,
на который указатель указывает. Т.е. в сущности механика та же,
что и с деревом.
>>вместо этого вставка нуждается в вызове рандомайзера для определения,
>>сколько указателей должно быть во вставляемом элементе, но работа
>>с памятью сложнее, чем для других структур данных.
>Получается, что мы проверяем некоторое количество цепочек.
>И чем это лучше обычной проверки нескольких последних цепочек?
Hет, мы ищем самую лексикографически близкую цепочку - она и будет
самой длинной.
  Leo

--- ifmail v.2.14dev2
 * Origin: Demos online service (2:5020/400@fidonet)
 Предыдущий блок Следующий блок Вернуться в индекс