【问题标题】:In Java, is there anything that works like an array but takes less memory?在 Java 中,有什么东西可以像数组一样工作但占用更少的内存?
【发布时间】:2014-05-25 01:04:51
【问题描述】:

我正在编写一个遗传算法。现在,我对所有事情都使用数组:我的个人由整数数组组成,我的人口是个人数组,我将信息存储在数组中以跟踪它。

我遇到的一个巨大限制是内存不足。我知道 GA 是内存密集型的,但我想知道我的第一步是否应该通过使用比数组更好的东西来进行简单的更改。

【问题讨论】:

  • 不,这是你能得到的最低级别。
  • 你的数组稀疏吗?
  • 我想不出比整数数组更有效的存储大量整数的方法。但是他们需要是整数吗?您是否使用所有 32 位?或者短裤或字节是一种选择?
  • @MattBall 出于好奇,如果他们是,你会建议什么?
  • 如果它们只有 0 和 1,则使用 BitSet

标签: java arrays genetic-algorithm


【解决方案1】:

这个问题的答案很大程度上取决于数据的性质。

如果您有稀疏数据(大部分是 0,很少有 1,反之亦然),那么创建一个包含 1 的 indices 数组可能对您有用。正如 David Wallace 所提到的,索引的 HashSet 可以让您快速检查特定索引是 1 还是 0。

如果您没有稀疏数据,那么您可能需要一个 BitSet。

这个discussion 也可能有助于您提供意见。

【讨论】:

  • 对于稀疏数据,HashSet 的索引可能比数组效果更好。
  • @DavidWallace,更新了它。谢谢。
【解决方案2】:

您可以将一个三元组放入一个整数中。

G = 0001

A = 0010

T = 0011

C = 0100

U = 0101 (RNA)

N = 0111(G 或 C)

Q = 1000(A 或 T/U)

...

3 x 4 位适合一个 32 位 int。三胞胎非常适合遗传背景。 编写一个 Helper 类来编码/解码基础并将其添加到列表数组中。考虑初始大小和负载系数。

【讨论】:

    猜你喜欢
    • 2017-11-07
    • 2016-12-30
    • 2013-12-12
    • 2013-10-11
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 2020-10-24
    相关资源
    最近更新 更多