#string #encoding #compression #base
#строка #кодирование #сжатие #основание
Вопрос:
Я знаю, что могу кодировать числа в базу, например 65, чтобы уменьшить размер отображения символов (даже если число меньше в двоичном формате).
Однако есть ли способ кодировать текст UTF-8 в другую базу с большим количеством символов, чем в нашем стандартном английском алфавите из 26 букв?Другими словами, вместо того, чтобы требовать 4 «символа» для слова «четыре» — я могу создать представление или хэш, используя только, может быть, 2 (т. Е. «6 $»)?
Комментарии:
1. Вы спрашиваете, может ли произвольная четырехсимвольная строка UTF8 быть представлена без потерь в двух байтах?
2. На самом деле @aix, я спрашиваю, могу ли я сжать произвольную строку из 2-30 символов (слово), чтобы она занимала меньше места, чем требуется для нашего стандартного алфавита из 26 символов. Например, архивирование или хеширование могут создать представление значения.
Ответ №1:
Я считаю, что суть Base64 в том, что вы можете легко преобразовать любые двоичные данные в «удобочитаемые» буквы и цифры. Это упрощает транскрибирование произвольных данных в группы новостей или передачу их по текстовым протоколам.
Если вы хотите дополнительно «сжать» эти данные, вам нужно выяснить, сколько символов вы хотите разрешить. Существует только так много комбинаций из 8 бит. Наиболее эффективным было бы использовать их все, и в этом случае почему бы просто не использовать gzip?
Комментарии:
1. Я был бы рад использовать gzip, если бы существовал какой-то способ представления значений в удобочитаемом виде (без распаковки каждого значения gzip’ed), а также сравнения значений gzip с другими. Вы можете увидеть пример преобразования чего-то вроде числа 4023 в «~ h» в коде, на который я ссылался выше.
Ответ №2:
Ваш вопрос, похоже, связан с энтропийным кодированием порядка 0: http://en.wikipedia.org/wiki/Entropy_encoding
Самый известный алгоритм этого семейства — кодирование Хаффмана: http://en.wikipedia.org/wiki/Huffman_coding
Хаффман не только сообщит вам, что используется только 64 символа и, следовательно, требуется только 6 бит на символы: это также будет иметь значение между частыми символами, такими как (пробел), и редкими, такими как (;) . Затем он создаст код, в котором частые символы используют меньше битов, чем более редкие, что приводит к лучшему сжатию (обычно 4,5 бита на символ в английских текстах).
Кодирование Хаффмана — это универсальный метод сжатия, используемый как часть многих алгоритмов сжатия, включая zip. Вы можете найти демонстрационную программу, которая применяет только один проход сжатия Хаффмана здесь (Huff0), это поможет вам определить, сколько можно получить, используя этот метод для ваших выборочных входных данных: http://fastcompression .blogspot.com/p/huff0-range0-entropy-coders.html