嘿伙计们,我很难想出一个有效的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
的任何符合此目的的建议吗?
答案 0 :(得分:4)
对于稀疏数组,HashMap
是一个很好的选择。它相对较快 - O(1)
查找 - 并且空间效率相对较高。我说比较,因为有很多开销。
还有其他Map
实现具有不同的行为 - 例如TreeMap
在O(lg n)
中执行但按键排序。
因此虽然Map<Integer, Map<Integer, Integer>>
或某些此类内容可能会使用100x100
非常稀疏的矩阵来节省空间,但我认为int[][]
的效率会低得多
如果需要考虑性能,那么你应该使用像jmh这样的方法对替代方案进行基准测试。在大多数情况下,我希望int[][]
能够胜过基于Map
的解决方案。
如果您使用的是Guava,则可以使用Table
。我上面描述的两个替代方案基本上是HashBasedTable
和ArrayTable
。我不希望ArrayTable
比原始int[][]
慢得多,但会占用更多空间。
简而言之: