普通稀疏矩阵压缩方式

普通稀疏矩阵压缩方式:

​ 采用三元组进行压缩
​ 三元组:有三个数据项:行、列、值 构成一个新整体,既可以顺序存储也可以链式存储三元组数据

#include <stdio.h>
#include<stdbool.h>
#include<stdlib.h>

typedef struct Node
{
	int row;
	int lin;
	int val;
}Node;
typedef struct Trip
{
	Node *arr;//存储所有三元组元素
	int cnt;//元素个数
	int r_max;//列数
	int c_max;//行数
}Trip;


Trip *create_trip(int r,int c ,int (*arr)[c],int cnt)
{
	//申请内存空间并初始化
	Trip *trip=malloc(sizeof(Trip));
	trip->arr=malloc(sizeof(Node)*cnt);
	trip->cnt=cnt;
	trip->r_max=r;
	trip->r_max=c;
	//遍历待压缩的二维数组,存储非零元素到三元组中
	int index=0;
	for(int i=0;i<r;i++)
	{
		for(int j=0;j<c;j++)
			{
			if(arr[i][j])
			{
				trip->arr[index].row=i;
				trip->arr[index].lin=j;
				trip->arr[index++].val=arr[i][j];

			}
				
			}

	}
	trip->cnt=index;
	return trip;
}


int main(int argc,const char* argv[])
{
	int arr[7][8]={};
	for(int i=0;i<7;i++)
	{
		for(int j=0;j<8;j++)
		{
			int x=rand()%7;
			int y=rand()%8;
			arr[x][y]=rand()%10;

		}
	}
	for(int i=0;i<7;i++)
	{
		for(int j=0;j<8;j++)
		{
		printf("%d ",arr[i][j]);
			
		}

		printf("\n");
		
	}
	Trip *trip=create_trip(7,8,arr,10);
	for(int i=0;i<trip->cnt;i++)
	{
		printf("%d %d %d  \n",trip->arr[i].row,trip->arr[i].lin,trip->arr[i].val);	
		
		
		
	}
	


		
	return 0;
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的压缩稀疏矩阵的代码,采用的是COO格式: ```c #include <stdio.h> #include <stdlib.h> typedef struct { int row; int col; int val; } Element; typedef struct { int row; int col; int count; Element *elements; } SparseMatrix; SparseMatrix *createSparseMatrix(int row, int col, int count) { SparseMatrix *matrix = (SparseMatrix*)malloc(sizeof(SparseMatrix)); matrix->row = row; matrix->col = col; matrix->count = count; matrix->elements = (Element*)malloc(count * sizeof(Element)); return matrix; } void destroySparseMatrix(SparseMatrix *matrix) { free(matrix->elements); free(matrix); } void printSparseMatrix(SparseMatrix *matrix) { int i, j, k; k = 0; for (i = 0; i < matrix->row; i++) { for (j = 0; j < matrix->col; j++) { if (k < matrix->count && matrix->elements[k].row == i && matrix->elements[k].col == j) { printf("%d ", matrix->elements[k].val); k++; } else { printf("0 "); } } printf("\n"); } } SparseMatrix *compressSparseMatrix(int **a, int row, int col) { int i, j, k, count; for (i = 0, count = 0; i < row; i++) { for (j = 0; j < col; j++) { if (a[i][j] != 0) { count++; } } } SparseMatrix *matrix = createSparseMatrix(row, col, count); for (i = 0, k = 0; i < row; i++) { for (j = 0; j < col; j++) { if (a[i][j] != 0) { matrix->elements[k].row = i; matrix->elements[k].col = j; matrix->elements[k].val = a[i][j]; k++; } } } return matrix; } int main() { int a[3][4] = { {1, 0, 0, 0}, {0, 0, 2, 0}, {0, 3, 0, 4} }; SparseMatrix *matrix = compressSparseMatrix((int**)a, 3, 4); printSparseMatrix(matrix); destroySparseMatrix(matrix); return 0; } ``` 代码中定义了两个结构体,一个是表示稀疏矩阵中的元素,另一个是表示整个稀疏矩阵。`createSparseMatrix`函数用于创建一个稀疏矩阵,`destroySparseMatrix`函数用于销毁一个稀疏矩阵,`printSparseMatrix`函数用于打印一个稀疏矩阵。`compressSparseMatrix`函数用于将一个普通矩阵压缩稀疏矩阵。函数中遍历矩阵,如果某个元素不为零,则将其作为一个稀疏矩阵元素存入稀疏矩阵的元素数组中。最后,程序通过调用`compressSparseMatrix`函数将一个普通矩阵转换成稀疏矩阵,并通过调用`printSparseMatrix`函数打印出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值