0

我有兴趣创建一个类以更紧凑的方式存储数据,我知道我可以轻松存储 0 到 2^(x)-1 之间的数字,以及使用按位运算符存储布尔值,但我对更多奇数,例如最多 6 个或其他东西。我已经在脑海中摆弄它大约一个星期了,现在已经在谷歌上搜索了大约一个小时,但我真的找不到任何帮助。

我正在寻找一种算法或其他东西来帮助我弄清楚如何最好地打包介于 0 和 1 到 32ish 之间的随机数之间的数据......

我只是对此进行头脑风暴,并且还想知道是否应该考虑这样的压缩。我正在研究这个的原因之一是巨大的阵列等。对不起,如果这是一个愚蠢的问题,我的大脑最近不是很敏锐。

此外,最大值示例:1,5,8,3,12,19

我正在考虑的最终课程将类似于:

public class MyObject{
  private long packed;
  ...
  public int getA(){...}
  public void setA(){...}
  public int getB(){...}
  public void setB(){...}

谢谢你的帮助,~vzybilly~

4

1 回答 1

0

作为一个普遍的问题,它对程序员来说不是很有趣——也许对数学家/信息理论家来说。具体的例子很有趣,但在当今世界内存充足但你和计算机所做的所有其他工作却更加稀缺的世界中并不重要。

假设您必须存储 1-6 范围内的一系列批号。您可以将其中的 12 个放入 32 位整数中,如 6^12 < 2^32。但是现在每当您访问数据时,您都有额外的算术,基本上可以查看入口模数 6^n+1 中有多少个 6^n。这是因为无论您使用哪种表示,都需要在速度和紧凑性方面进行权衡。“最佳”在实践中意味着直截了当。

这并不是说没有时间节省空间是免费的、好的和优雅的,但这是一个只有在需要它的情况下已经具备解决它的技能的人才能提出的问题。

于 2014-05-16T01:20:12.213 回答