是否有一种算法可以为给定范围内的每个条目找到最短的二进制表示?

Posted

技术标签:

【中文标题】是否有一种算法可以为给定范围内的每个条目找到最短的二进制表示?【英文标题】:Is there an algorithm to find the shortest binary representation for every entry within a given range? 【发布时间】:2022-01-11 04:56:54 【问题描述】:

我有一个编码方案,但我不知道它的名称。我知道必须有一种算法将整数编码/解码到这个二进制方案中。方案如下:

   1  2  3   4   5    6    7    8    9     etc.

0  -  0  0   00  00   00   00   000  000
1     1  10  01  01   01   010  001  001
2        11  10  10   100  011  010  010
3            11  110  101  100  011  011
4                111  110  101  100  100
5                     111  110  101  101
6                          111  110  110
7                               111  1110
8                                    1111

etc.

示例: 当您有 6 个整数(0 到 5)的范围时,您可以使用第 6 列。这样您可以在数字 0 和 1 上节省一点。使用第 9 列时,您将在除 7 和8.

“您将节省一点”与使用 2、3、4 或 N 位字相对。

我试图用谷歌搜索这个,但我找不到正确的搜索关键字。有人能指出我正确的方向吗?

谢谢!

【问题讨论】:

【参考方案1】:

这似乎是Huffman Encoding,假定在任何给定范围内的所有值均均匀分布。

例如,第 5 列只是字符集 [0-5](含)的霍夫曼编码,它假定所有 6 个数字出现的概率相同。

【讨论】:

您好 Dillon Davis,我想到了霍夫曼编码。但我认为你是对的。使用一组频率相等的 0-5 确实会在列中产生每个条目的位数。 您知道是否有一种算法不需要为每个范围(0-N)构建树而是直接计算它们?这必须有一个模式。我搜索了 De Bruijn 和其他一些序列,但找不到适合这个问题的序列。我要感谢你的建议,这给了我一个想法。我可以为我拥有的每个 0-N 范围预加载所有 Huffman 表。 @Willempie 研究自适应霍夫曼编码。作为奖励,它还可以适应每个数字/字符的频率,以提高效率。

以上是关于是否有一种算法可以为给定范围内的每个条目找到最短的二进制表示?的主要内容,如果未能解决你的问题,请参考以下文章

是否有一种算法可以在无向图中找到成本最高的长度为 k 的路径

寻找一种 JavaScript 算法来匹配给定半径内的 2 个人

最短母串

最短假子串

寻找包含两个节点的最短循环

在单词中找到最短的重复周期?