稀疏矩阵及其表示法(使用数组和链表)

一个矩阵是由 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

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/34573.html
点赞
0.00 平均评分 (0% 分数) - 0