【问题标题】:Data structure for a sparse matrix where elements are randomly distributed元素随机分布的稀疏矩阵的数据结构
【发布时间】:2011-03-25 10:54:57
【问题描述】:

除了链表,我想不出其他任何东西了。还有更好的主意吗?

【问题讨论】:

  • LCYSoft:您不必在问题标题中添加C, ...;这就是标签系统的用途。
  • 那么这和 C 有什么关系呢?
  • 正如我在您上一个问题中所评论的,您可以使用现有代码。
  • 你打算用你的矩阵做什么?这将限制您可以使用哪些库/算法。
  • 我想为以后的面试做准备。我知道我可以使用现有的代码,但我只想练习自己的 c 编码技能,稀疏矩阵似乎很有挑战性。。

标签: c data-structures matrix sparse-matrix


【解决方案1】:

如果您将元素存储在矩阵中,您可能需要考虑使用从坐标到其内容的哈希表。与将它们存储在链表中(即 O(1) 而不是 O(n))相比,这使您可以更快地查找任何矩阵位置的内容。

【讨论】:

  • 除非你不能用哈希表方法在合理的时间内计算任何有意义的东西。我不会,例如。将存储在哈希表中的矩阵相乘。
  • 你能详细说明一下吗?我的理解是用哈希表做乘法应该相当容易。有什么我想念的吗?
  • 两个问题:1) 矩阵乘法仍然是 O(n^3) 且常数很大:例如对于 CRS,您可以在 O(nz) 中进行大多数操作,其中 nz 是非零条目 2) 数据局部性对矩阵很重要,通常同一行的元素是连续存储的。
【解决方案2】:

Quatree matrices(论文中使用的代码是there)具有相当好的插入和访问复杂性,以及相当好的性能。它们有特定的算法(主要是研究论文的形式)。然而,它们并没有真正普及。但他们确实值得更多的爱。如果您打算求解系统,则解释了非常适合四叉树矩阵的分解there

如果你的矩阵是一次构建的,并且构建完成后不需要添加/删除元素,那么压缩行存储(或压缩列存储)是广泛而高效的,并且有库和特定算法对付他们。

毕竟,你没有告诉我们你想用你的矩阵做什么。

【讨论】:

    【解决方案3】:

    对于每个非零元素,您需要存储其坐标(行/列)及其值。有多种方法可以做到这一点。

    维基百科对一系列方法进行了概述: http://en.wikipedia.org/wiki/Sparse_matrix#Storing_a_sparse_matrix

    如果不进一步了解矩阵的大小和密度、内存限制、预期的访问模式等,就不可能说出什么最适合您的应用程序。

    【讨论】:

      猜你喜欢
      • 2010-11-02
      • 1970-01-01
      • 2019-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多