Популярно.
RAR, ZIP, ARJ и прочие - это лишь различные форматы архива, контейнеры. Как правило, архиваторы последовательно используют несколько алгоритмов сжатия, далее сжатые данные размещается в контейнере вместе с информацией об использованных кодеках. Все алгоритмы сжатия без потерь делятся на 2 большие группы - потоковые алгоритмы и блочные. Потоковые алгоритмы - могут работать в потоке
- то есть, грубо говоря, на вход алгоритма поступают данные последовательно, хоть по одномы байту, на выходе тоже последовательно появляются сжатые данные. Это алгоритмы Хаффмана, примитивное кодирование длинных серий (пару лет назад курсовик знакомой делал - разработка архиватора на базе этой байды
и наиболее совершенные из них - большое семейство словарных алгоритмов Лемпеля-Зива (LZ, LZW, deflating и др.).
Блочные алгоритмы отличаются тем, что для сжатия информации они должны изначально знать весь кусок сжимаемых данных. На практике, если входной файл большой, он разбивается на блоки, каждый из которых сжимается отдельно. Поэтому в потоке данные алгоритмы могут работать только так: накопить из входного потока блок данных, потом сжать его разом и выдать на выход. Эти алгоритмы более эффективны, чем поточные, но требуют больше ресурсов (и вообще довольно сложны для понимания, как там это все работает
Примеры - алгоритм Барроуза-Уилера (перестановок), семейство PPM алгоритмов (самые сильносжимающие на сегодня, но и самые медленные). Их, наряду с поточными и используют современные архиваторы, напр. RAR, 7zip и даже совсем не новый ha (если кто помнит такой еще под DOS, жал тексты как черт, но очень медленно).
Помню точно, что RAR использует PPM, какой-то LZ-подобный алогритм и кодирование Хаффмана - а в каком порядке они применяются к сжимаемому блоку - уже не помню.