什么是稀疏阵列?

713 阅读3分钟

稀疏阵列是什么意思?

稀疏数组稀疏矩阵是一个大部分元素为零的数组。

稀疏数组的特点。

  • 稀疏数组是一个大多数元素都有相同值的数组(默认值为零或空)。
  • 稀疏矩阵是那些大部分元素等于零的数组。
  • 稀疏数组是一个数组,其中的元素没有从零开始的连续索引。
  • 当非零元素较少时,稀疏数组被用于数组之上。稀疏数组需要较少的内存来存储元素,并且可以节省计算时间。

稀疏数组的例子。

\begin{bmatrix} 0 & 4 & 0 \ 1 & 0 & 0\ 0 & 3 & 0 \\end{bmatrix}

\begin{bmatrix} 0 & 4 & 0 &0\ 1 & 0 & 0 &2\ 0 & 3 & 0 & 0\    0 & 0 & 9 & 0\\end{bmatrix}

\begin{bmatrix} 0 &  0\ 0 & 3 \\end{bmatrix}

为什么需要稀疏数组而不是简单数组来存储元素。

  • 存储。 当有最大数量的零元素和最小数量的非零元素时,我们使用稀疏数组而不是简单数组,因为它需要较少的内存来存储元素。在稀疏数组中,我们只存储非零元素。
  • **计算时间:**在稀疏数组中,我们只存储非零元素,因此,只遍历非零元素所需的计算时间较少。

稀疏数组的表示方法。

稀疏数组可以用两种方式表示。

  • 阵列表示法
  • 链接列表表示法

1.阵列表示法。

为了表示一个稀疏数组,使用了二维数组,有三行,即。行,列,和值。

**行:**存在非零元素的行的索引。
列。非零元素所在的列的索引。
**值。**存在于(行,列)索引中的非零值。

稀疏数组的阵列表示

2.链接列表表示法。

使用链接列表来表示稀疏数组,每个节点有四个字段,即。行,列,值,和下一个节点。

**行:**存在非零元素的行的索引。
列。存在非零元素的列的索引。
**值。**存在于(行,列)索引中的非零值。
**下一个节点。**它存储下一个节点的地址。

稀疏数组的链接列表表示法

稀疏数组的数组表示法的实现。

稀疏数组的数组表示法的实现

下面是稀疏数组的表示方法。

C++

// Implementation of array representation
// of the sparse array
#include <iostream>
using namespace std;
int main()
{
int sparse[4][4] = { { 0, 0, 7, 0 },
{ 1, 0, 0, 0 },
{ 2, 0, 5, 0 },
{ 0, 8, 0, 4 } };
int s = 0;
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
if (sparse[i][j] != 0)
s++;
int representsparse[3][s];
int k = 0;
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
if (sparse[i][j] != 0) {
representsparse[0][k] = i;
representsparse[1][k] = j;
representsparse[2][k] = sparse[i][j];
k++;
}
cout <<"Representation of Sparse array using arrays : "
"\n";
for (int i = 0; i < 3; i++) {
for (int j = 0; j < s; j++)
cout <<" " << representsparse[i][j];
cout <<"\n";
}
return 0;
}

输出

Representation of Sparse array using arrays : 
 0 1 2 2 3 3
 2 0 0 2 1 3
 7 1 2 5 8 4