不好意思问了个含糊的问题,但我希望对一个有经验的哈斯克勒来说,这是一个不需要思考的问题。
我必须表示和操作对称矩阵,因此数据类型基本上有三种不同的选择:
(i,j)和(j,i)元素的矩阵,尽管m(i,j) = m(j,i)Data.Array (Int,Int) Int
i <= j (上三角矩阵)的元素(i,j)Data.Map (Int,Int) Int
k索引的向量,存储给定向量阶f(i,j) = k的上三角矩阵Data.Array国际贸易公司
需要对矩阵进行许多操作,更新单个元素,查询行和列等,但它们主要用作容器,不需要进行线性代数运算(反演、det等)。
如果矩阵的维数将在20x20附近,哪一个选项是最快的?如果我正确理解,每次更新(在数组中使用(//) )都需要完整的副本,所以在2或3情况下,从20x20=400元素转到20*21/2 = 210元素会有很大的意义,但是case 2和3的访问速度要慢一些。
有什么指引吗?
顺便说一句:第三个选项不是很好,因为计算f^-1需要平方根。
发布于 2011-11-15 04:52:48
还有第四种选择:使用一个减少的数组--大数组。我将使用选项1(使用完整的数组并只存储每个元素两次)或最后一个选项。如果您打算更新许多元素,我强烈建议使用可变数组;IOArray和STArray是流行的选择。
除非这是为了家庭作业什么的,否则你也应该看看黑客。快速观察表明,操纵矩阵的问题已经解决了好几次了。
https://stackoverflow.com/questions/8131120
复制相似问题