Math 仍然排序的最佳整数编码

Math 仍然排序的最佳整数编码,math,comparison,compression,string-comparison,Math,Comparison,Compression,String Comparison,UTF-8的一个简洁的特点是,如果你比较两个字符串(使用来完全回答这个问题,你需要知道材料中代码点的频率。 UTF-8是英语文本的最佳选择,因为多字节字符在典型英语文本中非常罕见 使用UTF-8作为基本算法对整数进行编码需要将前n个整数映射为1字节编码,然后m映射为2字节编码,以此类推。 这是否是最佳编码取决于分布。如果前n个数字与更高的数字相比非常频繁,那么UTF-8将是(接近)最佳的。标准编码很少,答案是否定的。任何超出UTF-8的进一步优化都不应称为“编码”,而应称为“压缩”-而词典编纂可

UTF-8的一个简洁的特点是,如果你比较两个字符串(使用来完全回答这个问题,你需要知道材料中代码点的频率。 UTF-8是英语文本的最佳选择,因为多字节字符在典型英语文本中非常罕见

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

标准编码很少,答案是否定的。任何超出UTF-8的进一步优化都不应称为“编码”,而应称为“压缩”-而词典编纂可比压缩是另一个部门


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

你考虑过哈夫曼编码的一种变体吗?传统上,递归合并两个频率最低的符号,但为了保持顺序,可以将两个相邻的符号合并用最少的总数

看起来这个问题已经被很好地研究过了(贪婪算法不是最优的)。最优算法是由Hu和Tucker给出的,本文对此进行了详细描述


讨论基于字典的保序压缩也很有趣。

请看一下书堆压缩我不明白“更频繁”是什么意思。你能详细说明一下吗?@NayukiMinase为了确定最佳性,我们必须有频率的概念。如果和((符号频率)*(符号长度)(适用于所有符号)最小化。我故意没有将我的问题形式化,因为我确实在寻找有关可排序编码的任何信息。我非常清楚您正在尝试对整数进行编码。如果您正在寻找特定的编码,那么您需要提供特定的分布。如果您正在寻找通用编码,那么用于UTF-8和UTF-16是编码可排序项(如整数或字符)的好选择。@Klaslindbaäck UTF-8的一个简单优化是删除第一个字节后字节头的10位。Varint样式的编码在这之后比UTF-8节省一位。UTF-8“浪费”为了使某些字节序列无效,并允许您向后迭代字符串(非常智能的权衡,IMO).但我还没有看到这样一个问题的答案:给定符号的频率和它们的顺序,构造一个使编码长度最小化并保持字符串之间逐位比较的代码。我不是在编码文本,而是数字;较小的数字被认为更频繁。说UTF-8最适合于英文文本似乎是一个双关语太天真了,因为它忽略了英语中使用的可变宽度编码和多字节字符。我的观点是,没有适合所有发行版的编码。如果您的发行版与典型英语文本的发行版相似,那么UTF-8是一个不错的选择。如果您有更广泛的高概率数字范围,那么UTF-16更好呃。如果不知道分布情况,就不可能判断特定的编码是否正确。这就是为什么我没有将这个问题标记为unicode,这两个答案都认为我在尝试编码数字流时正在尝试编码文本。