Сабж. На этот раз все может быть вполне реальней и не нужно ждать 3 миллиарда лет пока архиватор рандомно сгенерирует файл. Тут проще.
Все ниже полное ИМХО. Я могу полностью заблуждаться, так что пока не поздно откройте глаза себе или мне. Так что шибко не ругайте.
Итак как известно в файле с обычной кодировкой можно сохранить лишь 256 символов. Это спец символы, цифры, латиница и буквы кодировки. Русские, либо иврит, либо китайские и т.д. С этой же проблеммой сталкиваются все архиваторы. Поэтому разрабатываются хитроумные алгоритмы для сжатия данных. Так как если каждый повторяющийся блок данных кодировать 1 символом, то их кол-во упирается в 256 символьное ограничение.
Но ведь есть утф кодировка которая позволяет сохранять в одном файле целую кучу разнообразных символов, начиная от русского и кончая китайскими. Следовательно...
Еще одна бредовая теория архиватора.
Модератор: Модераторы разделов
-
demongloom
- Сообщения: 454
- Статус: Добрый Демон
Еще одна бредовая теория архиватора.
Если жизнь твоя порвется, тебе новую сошьют.
-
Kot-Mulder
- Сообщения: 99
Re: Еще одна бредовая теория архиватора.
Сразу вопрос: а в каком виде сохраняются в UTF кодировке файлы? Если там более 256 вар-тов символов => что один символ утф просто кодируется несколькими ASCII (полагаю, двух должно хватить), или нет?
Правды нет, есть только свое мнение (с)
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: Еще одна бредовая теория архиватора.
да. в чем принципиальная разница? выигрыш где? один ASCII символ занимает 1 байт, а один юникодный - от 2 до 8. и в чем смысл?
слава роботам!
-
bogus
- Сообщения: 160
Re: Еще одна бредовая теория архиватора.
На самом деле, при архивировании, блоки информации кодируются разным числом бит, в зависимости от частоты повторения этого блока. А ограничение на размер словаря мы можем задать любое.
Хотя, это зависит от конкретного алгоритма...
bogus добавил в 19.12.2004 15:04
P.S. Sorry, если я просто не врубился в тему
Хотя, это зависит от конкретного алгоритма...
bogus добавил в 19.12.2004 15:04
P.S. Sorry, если я просто не врубился в тему
Как всякое несовершенное существо я могу ошибаться. Простите меня.
jabberId = foldl (flip (:)) [] "ur.rebbaj@43sugob"
jabberId = foldl (flip (:)) [] "ur.rebbaj@43sugob"
-
TIM
- Сообщения: 91
- ОС: FreeBSD
Re: Еще одна бредовая теория архиватора.
Редко встречаются тексты в которых-бы использовалась хотя-бы малая толика всего потенциала UTF ... (например, чтобы символы 2х или 3х алфавитов встречались в одном тексте с равной вероятностью)
Поэтому, для юникодного текcта, как впрочем и для любого другого (разница будет только при задании формата для дерева частот), IMHO, хороших результатов можно добится при использовании подобного метода:
1) квантование (для возможной работы в потоке);
2) сжатие квантов по словарю или смещениям (LZ* (Лемпела-Зива) - много способов ...) - жмём слова и пр. повторяющиеся блоки;
3) преобразование сжатого кванта к виду, более удобному для частотной компрессии (напр. метод BWT (Барроуза-Уилера) с последующим MFT(Move to Front Translation) или кодированием расстояний). Словарь лучше не преобразовывать;
4) частотное сжатие атомарных конструкций (одиночных символов, идентификаторов вставок, длин, смещений и т.п.) в преобразованном кванте и словаре (в случае LZ77,LZ78 словарь сжимать не требуется - там используются смещения) - методом Хаффмана ("путь" по дереву частот) или арифметическим методом (кодирование интервалов в зависимости от вероятностей частот) - уходим от избыточности текста/юникода - теперь каждый атом имеет длину, зависящую только от частоты его появления в тексте, сжатом по словарю и словаре, вместе взятым;
и только в самом конце это всё укладывается в двоичное представление - т.е. мы уже имеем не байты (это про 256 символов), а битовый поток, состоящий из элементов переменной длины.
- можно, кстати, комрессировать по частоте и вставки из словаря (при предварительном препроцессинге текста, а это уже зависит от свойств текста)
З.Ы. Не изобретайте велосипеды, а путешествуйте на них - может-быть и откроете новую страну ...
Поэтому, для юникодного текcта, как впрочем и для любого другого (разница будет только при задании формата для дерева частот), IMHO, хороших результатов можно добится при использовании подобного метода:
1) квантование (для возможной работы в потоке);
2) сжатие квантов по словарю или смещениям (LZ* (Лемпела-Зива) - много способов ...) - жмём слова и пр. повторяющиеся блоки;
3) преобразование сжатого кванта к виду, более удобному для частотной компрессии (напр. метод BWT (Барроуза-Уилера) с последующим MFT(Move to Front Translation) или кодированием расстояний). Словарь лучше не преобразовывать;
4) частотное сжатие атомарных конструкций (одиночных символов, идентификаторов вставок, длин, смещений и т.п.) в преобразованном кванте и словаре (в случае LZ77,LZ78 словарь сжимать не требуется - там используются смещения) - методом Хаффмана ("путь" по дереву частот) или арифметическим методом (кодирование интервалов в зависимости от вероятностей частот) - уходим от избыточности текста/юникода - теперь каждый атом имеет длину, зависящую только от частоты его появления в тексте, сжатом по словарю и словаре, вместе взятым;
и только в самом конце это всё укладывается в двоичное представление - т.е. мы уже имеем не байты (это про 256 символов), а битовый поток, состоящий из элементов переменной длины.
- можно, кстати, комрессировать по частоте и вставки из словаря (при предварительном препроцессинге текста, а это уже зависит от свойств текста)
З.Ы. Не изобретайте велосипеды, а путешествуйте на них - может-быть и откроете новую страну ...