具有大量突变的矩阵的最佳数据结构

时间:2015-02-17 10:08:31

标签: java matrix multidimensional-array data-structures graph

嘿伙计们,我很难想出一个有效的data structure来保存矩阵(它们的大小可能接近75x75)。 1是唯一重要的单元格,0将永远是空的并且是无用的。如果我们不能将0加载到data structure

,我更愿意
        Col 1   Col 2  Col 3 Col 4  Col 5
Row 1       0       0      1     0      1
Row 2       0       1      0     0      0
Row 3       1       1      0     0      0
Row 4       0       0      0     0      0
Row 5       0       0      1     0      1

请记住,我将制作一个算法来对matrix进行排序,我将移动很多列和行。

我在考虑一个包含行,列和值的表。但我不确定这是否是最好的选择。我老师叫我看graph structure;它看起来很有希望保存数据,但移动行和列对我来说看起来很糟糕。

有关data structures的任何符合此目的的建议吗?

1 个答案:

答案 0 :(得分:4)

对于稀疏数组,HashMap是一个很好的选择。它相对较快 - O(1)查找 - 并且空间效率相对较高。我说比较,因为有很多开销。

还有其他Map实现具有不同的行为 - 例如TreeMapO(lg n)中执行但按键排序。

因此虽然Map<Integer, Map<Integer, Integer>>或某些此类内容可能会使用100x100非常稀疏的矩阵来节省空间,但我认为int[][]的效率会低得多

如果需要考虑性能,那么你应该使用像jmh这样的方法对替代方案进行基准测试。在大多数情况下,我希望int[][]能够胜过基于Map的解决方案。

如果您使用的是Guava,则可以使用Table。我上面描述的两个替代方案基本上是HashBasedTableArrayTable。我不希望ArrayTable比原始int[][]慢得多,但会占用更多空间。

简而言之:

  1. 基准
  2. 基准
  3. 基准