终于回来了。粗略地看了下小施与有容的代码,简单点评一下,说的不对的地方两位见谅呵呵。
小施的代码利用链表实现矩阵的压缩存储,矩阵的尺寸可根据需要在机器资源允许的范围内任意伸缩。达到了我开贴的要求。再确认一下有没有什么BUG就准备领奖吧。
美中不足是效率偏低,对数据的检索在行列两个方向上都是顺序检索。这样虽然可以最大限度地降低空间的消耗,但代价是时间。
一个折衷的方案是对于矩阵的其中一维使用数组(这样可以直接检索以提高检索效率),另一维使用链表以降低空间消耗。一般行的头指针用数组,每行元素用链表。
有容的代码是用一个固定尺寸的一维数组来存储稀疏矩阵的有效元素。这种做法在小范围内可以实现矩阵操作的要求,但毕竟是受限的。固定的空间操作小规模的矩阵存在空间浪费,而对于大规模的矩阵可能又会因为空间不足而操作失败。而且这种结构的矩阵操作算法效率更低,元素的插入删除需要做大量的数据移动。
呵呵,建议有容重新设计矩阵结构,再接再厉。
关于稀疏矩阵的判定标准是个很模糊的概念,小施提到的那个判定公式也不过是个经验公式。所以,我们建立的稀疏矩阵理论上要完全能够操作一个普通矩阵才行(因为空间不足导致操作失败的因素不予考虑)。
小施的代码利用链表实现矩阵的压缩存储,矩阵的尺寸可根据需要在机器资源允许的范围内任意伸缩。达到了我开贴的要求。再确认一下有没有什么BUG就准备领奖吧。
美中不足是效率偏低,对数据的检索在行列两个方向上都是顺序检索。这样虽然可以最大限度地降低空间的消耗,但代价是时间。
一个折衷的方案是对于矩阵的其中一维使用数组(这样可以直接检索以提高检索效率),另一维使用链表以降低空间消耗。一般行的头指针用数组,每行元素用链表。
有容的代码是用一个固定尺寸的一维数组来存储稀疏矩阵的有效元素。这种做法在小范围内可以实现矩阵操作的要求,但毕竟是受限的。固定的空间操作小规模的矩阵存在空间浪费,而对于大规模的矩阵可能又会因为空间不足而操作失败。而且这种结构的矩阵操作算法效率更低,元素的插入删除需要做大量的数据移动。
呵呵,建议有容重新设计矩阵结构,再接再厉。
关于稀疏矩阵的判定标准是个很模糊的概念,小施提到的那个判定公式也不过是个经验公式。所以,我们建立的稀疏矩阵理论上要完全能够操作一个普通矩阵才行(因为空间不足导致操作失败的因素不予考虑)。
重剑无锋,大巧不工