前言
This Series aritcles are all based on the book 《经典算法大全》; 对于该书的所有案例进行一个探究和拓展,并且用python和C++进行实现; 目的是熟悉常用算法过程中的技巧和逻辑拓展。
提出问题
46.Algorithm Gossip:稀疏矩阵
说明
如果在矩阵中,多数的元素并没有资料,称此矩阵为稀疏矩阵(sparse matrix ), 由于矩阵在程式中常使用二维阵列表示,二维阵列的大小与使用的记忆体空间成正比,如果多数的元素没有资料 , 则会造成记忆体空间的浪费 , 为 此 , 必须设计稀疏矩阵的阵列储存方式 , 利用较少的记忆体空间储存完整的矩阵资讯。
送分题; 没什么讲的, 终于结束了排序和搜寻。。这个看代码就知道什么意思了, 具体的用处,出现了就能很快手写出来; 一个小技巧。
分析和解释
代码
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int num[5][3] = {{5, 6, 4},
{1, 1, 3},
{2, 3, 6},
{3, 2, 9},
{4, 4, 12}};
int i, j, k = 1;
printf("sparse matrix:
");
for(i = 0; i < 5; i++) {
for(j = 0; j < 3; j++) {
printf("%4d", num[i][j]);
}
putchar('
');
}
printf("
matrix还原:
");
for(i = 0; i < num[0][0]; i++) {
for(j = 0; j < num[0][1]; j++) {
if(k < num[0][2] &&
i == num[k][0] && j == num[k][1]) {
printf("%4d ", num[k][2]);
k++;
}
else
printf("%4d ", 0);
}
putchar('
');
}
return 0;
}
拓展和关联
后记
参考书籍
- 《经典算法大全》
- 维基百科