有理数向量的位编码

Bit encoding for vector of rational numbers

我想为有理数结构实现超紧凑存储。

在Alexander Schrijver的书"Theory of Linear and Integer Programming"中,我找到了rational number、向量和矩阵的位大小(第15页)的定义:

有理数的表示很清楚:符号是一位,商和分数是对数。

我不明白向量如何只用 n 位编码来区分它的元素? 例如,如果我想写两个元素的向量怎么办: 524 = 1000001100b42 = 101010b。如何仅使用 2 个附加位来指定 1000001100 结束和 101010 开始的时间?

矩阵表示也存在同样的问题。

不可能只用两位来指定商结束和小数开始的时间。至少你需要和商的长度 or/and 一样大的分数大小的长度。另一种方法是对商和分数使用固定位数,类似于 IEEE 754.

当然,不可能仅仅将整数表示相互附加,并添加有关合并位置的信息,因为这将比书中公式给出的位数多得多,我不知道无法访问。
我相信这是我不是专家的编码理论的问题。但我发现了一些可能会为您指明正确方向的东西。在 this post 中描述了一个 "interpolative code"。如果将它应用于您的示例 (524, 42),您会得到
f(要编码的整数个数,都在[1,N] = 2
范围内 N = 524
编码后的2个整数的最大位长为
f • (2.58 + log (N/f)) = 9,99…,即 10 位
因此,有可能进行超紧凑编码,尽管编码和解码需要花费大量时间。