一个矩阵是由 m 行和 n 列组成的二维数据对象,因此总共拥有 m x n 个值。如果矩阵中的大部分元素值都为 0,那么我们就称它为稀疏矩阵。
为什么要使用稀疏矩阵而不是普通矩阵?
- 存储空间: 非零元素的数量少于零,因此我们可以使用更少的内存来仅存储这些非零元素。
- 计算时间: 通过逻辑设计一种仅遍历非零元素的数据结构,我们可以节省计算时间。
示例:
0 0 3 0 4
0 0 5 7 0
0 0 0 0 0
0 2 6 0 0
如果用二维数组来表示稀疏矩阵,会导致大量的内存浪费,因为在大多数情况下,矩阵中的零是没有用的。因此,我们不再把零和非零元素一起存储,而是只存储非零元素。这意味着我们要以 三元组- (行, 列, 值) 的形式来存储非零元素。
稀疏矩阵的表示方法有很多种,以下是两种常见的表示方式:
- 数组表示法
- 链表表示法
方法 1:使用数组:
我们可以使用一个二维数组来表示稀疏矩阵,该数组包含三行,分别命名为:
- 行: 非零元素所在的行索引
- 列: 非零元素所在的列索引
- 值: 位于索引 – (行, 列) 处的非零元素的值
!Sparse Matrix Array Representation
实现:
C++
CODEBLOCK_112d28e8
C
CODEBLOCK_d10838c6
Java
“java
// Java program for Sparse Matrix Representation
// using Array
class GFG
{
public static void main(String[] args)
{
int sparseMatrix[][]
= {
{0, 0, 3, 0, 4},
{0, 0, 5, 7, 0},
{0, 0, 0, 0, 0},
{0, 2, 6, 0, 0}
};
int size = 0;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 5; j++)
{
if (sparseMatrix[i][j] != 0)
{
size++;
}
}
}
// number of columns in compactMatrix (size) must be
// equal to number of non – zero elements in
// sparseMatrix
int compactMatrix[][] = new int[3][size];
// Making of new matrix
int k = 0;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 5; j++)
{
if (sparseMatrix[i