在内存中存储对称矩阵的最佳方法是哪一种?
最好节省一半的空间,而又不会过多地降低结构的速度和复杂性。这是一个与语言无关的问题,但是如果您需要做一些假设,只需假设它是一种很好的古老普通编程语言,例如C或C++。
似乎有一种感觉,就好像有一种方法可以使事情简单或只是在矩阵本身很大时,对吗?
仅出于形式上的考虑,我的意思是,对于我要存储的数据,此断言始终正确
matrix[x][y] == matrix[y][x]
最佳答案
我发现许多高性能程序包仅存储整个矩阵,但随后仅读取上三角或下三角。然后,他们可能会在计算过程中使用额外的空间来存储临时数据。
但是,如果存储确实是一个问题,那么只需将n(n+1)/2
元素存储在一个一维数组中即可构成上三角形。如果这使您的访问变得复杂,只需定义一组帮助器函数即可。
在C中访问矩阵matA
,您可以定义一个宏:
#define A(i,j, dim) ((i <= j)?matA[i*dim + j]:matA[j*dim + i])
那么您几乎可以正常访问阵列。
关于language-agnostic - 如何存储对称矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3187957/