我想为有理数的结构实现超紧凑存储。
在Alexander Schrijver撰写的“线性和整数编程理论”一书中,我发现了rational number,向量和矩阵的位大小(第15页)的定义:
有理数的表示很清楚:符号为一位,对数和分数为对数。
我不知道如何只用n
位对向量进行编码才能区分其元素?
例如,如果我想写两个元素的向量怎么办:
524 = 1000001100b
,42 = 101010b
。如何仅使用2个附加位来指定1000001100
结束和101010
开始的时间?
矩阵表示存在相同的问题。
答案 0 :(得分:3)
当然,不可能仅将整数表示形式相互附加,并添加有关合并位置的信息,因为这将花费比书中公式所给定的位数更多的位数,而我不会可以访问。
我认为这是我不是专家的编码理论所提出的问题。但是我发现了一些可能会指出正确方向的东西。在this post中,除其他外,还描述了“内插代码”。如果将其应用于示例(524,42),则会得到
f(要编码的整数数,均在[1,N] = 2
的范围内
N = 524
这样,已编码的2个整数的最大位长度为
f•(2.58 + log(N / f))= 9,99…,即10位
因此,有可能进行超紧凑的编码,尽管人们不得不花费大量时间进行编码和解码。
答案 1 :(得分:0)
不可能仅使用两位来指定商结束和分数开始的时间。至少您将需要与商的长度或/和分数大小的长度一样大。另一种方法是对商和分数使用固定位数,类似于IEEE 754。