【问题标题】:2D array, some cells hold specific data二维数组,一些单元格保存特定数据
【发布时间】:2018-08-29 19:01:25
【问题描述】:

我有一个数组,让我们说(为了更容易)x 和 y 位置。我只想为某些单元格保存特定数据,这似乎很复杂。我可以为所有单元格保存特定数据,但我只想为其中一些保存它(不浪费内存,对于小型 3000x3000 阵列,有 9 000 000 个单元格)。此外,它必须非常快。我不知道该怎么办。散列算法似乎是针对不同类型的问题。我想通过例如x=50 和 y=100 进入 container 并快速获取 data 但是如果 x=100 和 y=50 等怎么办。谢谢您的帮助。

【问题讨论】:

  • 查找“稀疏矩阵”

标签: c++ arrays algorithm containers


【解决方案1】:

使用unordered set

key 可以是 x,y 的元组

还提供一个类KeyEqual,用您的自定义比较函数替换默认类。

【讨论】:

  • 这似乎是最准确的方法,谢谢
【解决方案2】:

矩阵是由m行n列定义的二维对象,如果该矩阵中的大部分元素的值为0,则称为稀疏矩阵

int sparseMatrix[x][y]

这用于通过仅遍历非零元素来减少计算时间。

【讨论】:

  • 我没见过Sparse Matrix之类的东西,好像很有意思,不过还是会去unordered_set,谢谢分享解决方案
【解决方案3】:

使用这个:

int a[sizex][sizey]; //this creates an array with empty slots
a[x][y]=somenumber; //this changes a value of slot on (x,y) coordinates

sizex: 数组中 x 的大小

sizey: 数组中y的大小

例子:

e=空

int a[4][5]; /*creates an array: e, e ,e ,e
                                 e, e ,e ,e
                                 e, e ,e ,e
                                 e, e ,e ,e
                                 e, e ,e ,e*/
a[1][2]=5; /*Now array look like this: e, e ,e ,e
                                       5, e ,e ,e
                                       e, e ,e ,e
                                       e, e ,e ,e
                                       e, e ,e ,e*/
cout<<a[1][2]; //this prints number 5

【讨论】:

  • 我描述的问题是在你将一些数据保存在一个数组中之后,一些单元格是唯一的,就像在另一个容器中有另一个数据一样,但是第二个容器的大小要小得多(因为独特的单元格较少)。然后将独特的单元格与第二个容器等绑定。
【解决方案4】:

HashMaps 的 HashMap 应该可以做的很好,并且可以作为你用例的稀疏矩阵。它以不同的语言实现是,

  • C++11:unordered_map&lt;int, unordered_map&lt;int, int&gt;&gt; store;
  • Java:HashMap&lt;Integer, HashMap&lt;String, Integer&gt;&gt; store = new HashMap&lt;&gt;();
  • 蟒蛇:store = defaultdict(dict)

【讨论】:

  • 是的,但无论如何我会选择 1D unordered_set,谢谢您的帮助
猜你喜欢
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-01
  • 1970-01-01
  • 2018-07-05
  • 1970-01-01
相关资源
最近更新 更多