Кодировать строку в другую базу с большим количеством символов?

Я знаю, что могу кодировать числа по основанию вроде 65 чтобы уменьшить размер отображаемого символа (даже если число меньше в двоичном формате).

Тем не менее, есть ли способ кодировать текст UTF-8 в другую базу с большим количеством символов, чем наш стандартный 26-буквенный английский алфавит? Другими словами, вместо того, чтобы требовать 4 "символа" для слова "четыре" - Я могу создать представление или хэш, используя только, может быть, 2 (т.е. "6$")?


person Xeoncross    schedule 10.10.2011    source источник
comment
Вы спрашиваете, может ли произвольная четырехсимвольная строка UTF8 быть без потерь представлена ​​двумя байтами?   -  person NPE    schedule 10.10.2011
comment
На самом деле @aix, я спрашиваю, могу ли я сжать произвольную строку из 2-30 символов (слово), чтобы она занимала меньше места, чем требует наш стандартный 26-символьный алфавит. Подобно архивации или хэшированию, можно создать репрезентативное значение.   -  person Xeoncross    schedule 10.10.2011


Ответы (2)


Я считаю, что суть Base64 заключается в том, что вы можете легко преобразовать любые двоичные данные в «удобочитаемые» буквы и цифры. Это позволяет легко транскрибировать произвольные данные в группы новостей или передавать их по текстовым протоколам.

Если вы хотите дополнительно «сжать» эти данные, вам нужно выяснить, сколько символов вы хотите разрешить. Есть только так много комбинаций 8 бит. Наиболее эффективно было бы использовать их все, в таком случае почему бы просто не использовать gzip?

person Mike Christensen    schedule 10.10.2011
comment
Я был бы рад использовать gzip, если бы был какой-то способ представить значения в удобочитаемом виде (без распаковки каждого значения, записанного gzip), а также сравнить значения gzip с другими. Вы можете увидеть пример преобразования чего-то вроде числа 4023 в ~h в коде, на который я ссылался выше. - person Xeoncross; 10.10.2011

Похоже, ваш вопрос связан с энтропийным кодированием порядка 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

person Cyan    schedule 11.10.2011