Algorithm Gossip (46) 稀疏矩阵存储

前言

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;
	}

拓展和关联

后记

参考书籍

  • 《经典算法大全》
  • 维基百科
原文地址:https://www.cnblogs.com/actanble/p/6711225.html