仍然排序的最佳整数编码

时间:2012-05-20 04:08:40

标签: math comparison compression string-comparison

UTF-8的一个优点是,如果你逐个字节地比较两个字符串(<),你会得到相同的答案,就好像你已经比较了它们的代码点一样。我想知道是否有类似的编码是最佳的(例如UTF-8“浪费”空间,如果它们不是表示代码点的第一个字节,则用10xxxxxx标记字节)。

这里的最优性假设是,如果 n < n ,那么非负数 n 比数字 m 更频繁。

我最感兴趣的是知道是否存在适用于整数的(字节可比较)编码,如果| n, n m 更频繁 | < | |

3 个答案:

答案 0 :(得分:2)

您是否考虑过霍夫曼编码的变体?传统上,一个递归地合并两个最不频繁的符号,但为了保留顺序,可以改为合并具有最小和的两个相邻符号。

看起来这个问题已得到充分研究(并且贪婪算法不是最优的)。最佳算法由Hu和Tucker给出,在here中有thesis和更详细的描述。

这个paper讨论保持字典的基于字典的压缩看起来也很有趣。

答案 1 :(得分:0)

要完全回答该问题,您需要知道材料中代码点的频率。 UTF-8是英文文本的最佳选择,因为多字节字符在典型的英文文本中非常罕见。

要使用UTF-8作为基本算法对整数进行编码,需要将前n个整数映射为1字节编码,下一个m映射为2字节编码,依此类推。 这是否是最佳编码取决于分布。如果前n个数字与较高数字相比非常频繁,则UTF-8将(接近)最佳。

答案 2 :(得分:0)

标准编码很少,答案是否定的。除了UTF-8之外的任何进一步优化不应该被称为“编码”,而应该被称为“压缩” - 并且按字典相似的压缩是不同的部门。

如果您正在解决现实世界(非纯学术)问题,我会坚持使用最标准的UTF8。与utf8everywhere.org上的其他标准编码相比,您可以了解其效率。