对称对角矩阵的表示

时间:2016-10-19 00:29:07

标签: c++ algorithm

让我们假设我们有一个巨大的对称对角矩阵。实现这个的有效方法是什么?

我能想到的唯一方法是通过使用Xij = Xji的对称属性,我们可以将这个矩阵的大小减半。但是,然后使用2D阵列表示此矩阵将是低效的,因为我们不能通过使用数组来减小矩阵大小。

使用邻接列表表示此矩阵的另一个因素也是低效的,因为将此矩阵与图形相关联。这将是一个密度图。并且adj列表的操作需要很多时间,例如删除,插入和搜索。

但是使用堆呢?

1 个答案:

答案 0 :(得分:3)

在你决定用这个矩阵(或者矩阵?)来做什么之前,没有一个答案。

如果您要存储并记住它,那么只需按顺序存储它,省去冗余条目。 (你的代码知道如何访问它,因为它就是这样,对吧?)

更可能的是,您希望对其执行常规矩阵运算。在这种情况下,您是否尝试使存储高效或执行?在后一种情况下,我没有看到很多机会基于它是对称的 - 乘法是昂贵的,你可能仍然需要所有这些。如果它是存储,那么您是否将自己局限于仅采用对称输入和对称输出的操作?听起来非常具体。如果是这样,那么你只需要对你要存储的部分进行计算,因为根据定义,其他条目是对称的,所以只需编写你的代码来生成矩阵的那部分,你就完成了。