稀疏数组 sparsearry:
当一个数组大部分元素为0,或者同一个值得数组时,可以用稀疏数组保存该数组
处理方式
- 记录数组一共有几行几列,有多少不同的值
- 把不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
原始数组转稀疏数组
- 遍历原始二维数组,得到有效数据的个数sum
- 根据sum,创建稀疏数组sapareArry int[sum+1][3]
- 将有效数据存入稀疏数组中
稀疏数组转原始数组
- 根据稀疏数组的第一行,创建原始数组
- 读取稀疏数组的后几行,赋值给原始数组
public int[,] arry = new int[11, 11];
public void Init()
{
arry[1, 2] = 3;
arry[3, 4] = 5;
}
public int[,] Save()
{
int[,] _arr;
Dictionary<int,int> dic = new Dictionary<int, int>();
for (int i = 0; i < arry.GetLength(0); i++)
{
for (int j = 0; j < arry.GetLength(1); j++)
{
if (arry[i,j] != 0)
{
dic.Add(i,j);
}
}
}
_arr = new int[dic.Count+1,3];
_arr[0,0] = arry.GetLength(0);
_arr[0,1] = arry.GetLength(1);
_arr[0,2] = dic.Count;
int num = 1;
foreach (var item in dic)
{
_arr[num,0] = item.Key;
_arr[num,1] = item.Value;
_arr[num,2] = arry[item.Key,item.Value];
num++;
}
return _arr;
}
public int[,] Restory(int[,] sparsearry)
{
if (sparsearry.Length == 0) return new int[0,0];
int[,] origin_arry = new int[sparsearry[0,0],sparsearry[0,1]];
for (int i = 0; i < sparsearry[0,2]; i++)
{
origin_arry[sparsearry[i+1,0],sparsearry[i+1,1]] =sparsearry[i+1,2];
}
return origin_arry;
}
public void Show(int[,] arr)
{
for (int i = 0; i < arr.GetLength(0); i++)
{
for (int j = 0; j < arr.GetLength(1); j++)
{
if (j == arr.GetLength(1)-1)
{
Console.WriteLine(arr[i, j] + "\t");
}
else
{
Console.Write(arr[i, j] + "\t");
}
}
}
}