Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用链表表示Java中的稀疏矩阵_Java_Sparse Matrix - Fatal编程技术网

用链表表示Java中的稀疏矩阵

用链表表示Java中的稀疏矩阵,java,sparse-matrix,Java,Sparse Matrix,我正在制作一个小程序来表示稀疏矩阵(一个有很多元素等于零的矩阵)。如第108页所示(我认为看这个图就足以理解它),它使用的是链表 [如果你理解这个数字,就不要读这一段] 它必须只存储与零不同的元素,保存元素的行和列,并按如下方式链接它们。矩阵的第一个元素必须有它的维数;它链接到一个节点,该节点表示元素不同于零的第一行,该元素链接到两个节点:矩阵元素本身(右侧链接)和元素不同于零的下一行。这样,就构成了整个矩阵 好的,我在思考每个类的变量时遇到了问题。我有两个:节点和矩阵 public class

我正在制作一个小程序来表示稀疏矩阵(一个有很多元素等于零的矩阵)。如第108页所示(我认为看这个图就足以理解它),它使用的是链表

[如果你理解这个数字,就不要读这一段]
它必须只存储与零不同的元素,保存元素的行和列,并按如下方式链接它们。矩阵的第一个元素必须有它的维数;它链接到一个节点,该节点表示元素不同于零的第一行,该元素链接到两个节点:矩阵元素本身(右侧链接)和元素不同于零的下一行。这样,就构成了整个矩阵

好的,我在思考每个类的变量时遇到了问题。我有两个:
节点
矩阵

public class Node {
    int row;
    int column;
    double value;
    Nodo columnLink;
    Nodo rowLink;
    Nodo nextRowLink;
}

public class Matrix{
    Nodo head;
    Nodo first;
    Nodo last;
}
这是最好的方式吗?我的意思是,当它是头节点时,它不会在
value
中存储任何内容;当它是非零元素时,它不会在
nextRowLink
中存储任何内容。我问的是内存使用,因为space矩阵的目的是不使用内存中不必要的空间。什么意味着
nextRowLink=null
?,
value
是本机变量,因此,即使它是
value=0或Double.NaN,也需要64位


这是一种比我正在考虑的更好的方法吗?

我会这样做:一个链表的链表

class SparseMatrix {
    ColumnNode head;
    int dimx, dimy;
    // other members
}

class ColumnNode {
    int colNum;
    RowNode head;
    ColumnNode next;
}

class RowNode {
    int rowNum;
    double value;
    RowNode next;
}
它有稍微“更细”的节点,在类型系统的帮助下更容易正确,并允许您使用
head
指针跳过不必要的“head”节点


如果您知道每行(列)至少包含一个值,请切换到列(行)列表数组。

您可以定义既不包含值字段也不包含下一个链接字段的父类
Nodo
。然后可以定义两个子类:
RowHead
具有
nextRowLink
nodoconda
具有
字段。第一个用于行标题,另一个用于行上的其余节点。

最后一个行节点必须链接到ColumnNode,因为它们是不同的类,所以有问题,不是吗?看这个图()@Roger:如果你愿意,你可以让这两种类型的列表循环,就像图中一样:将最后一个
RowNode
next
指向其列中的第一个
RowNode
。不过,这需要空节点来支持空行/空列。(我看不出什么算法会从这个设置中受益…)最后一个节点数据必须链接到一个RowHead,它们有相同的父类,但是,没有问题吗?后面的问题呢?
nextRowLink=null的内存用途是什么和带有双对象的一个。