首页天道酬勤数据稀疏,字符串数组压缩

数据稀疏,字符串数组压缩

张世龙 05-12 11:05 63次浏览

文章目录1 .稀疏矩阵的概念2 .稀疏矩阵的压缩3 .源代码的实现

1 .稀疏矩阵概念

在矩阵中,如果数值为0元素的数量远远多于非0元素的数量,且非0元素的分布不规则,则将该矩阵称为稀疏矩阵;

2 .稀疏矩阵的压缩如果想把含有这么多0要素的稀疏矩阵存入计算机,这些没有意义的0也同样会消耗计算机的内存,浪费计算机的内存。 那么,关于稀疏矩阵的存储该怎么办呢? 让我介绍一个例子。

例:现在模拟11*11五子棋盘的存档和后续。 棋盘上有黑和白两种棋子,分别用1、2表示,没有棋子的地方用0表示。 假设该棋盘为3个棋子、2个白棋子、1个黑棋子,则棋盘被抽象为稀疏矩阵,其中除0以外的要素只有3个,分别为1、2、2。 我现在不想下象棋,所以我要保存这个盘。 也就是说,保存此稀疏矩阵。

3 .源代码package com.luobin.data structure实现:/* * @ author luobin * @ version 1.0 * @ date 2021/7/317336009下午*/public class sparse array {//sparse array的意思是稀疏数组建立原始二维阵列(/0表示无棋子,1表示黑色(/十一行,建立十一列阵列)////盘intchessarr1)的chessArr1[1][2]=1; chessArr1[2][3]=2; chessArr1[6][6]=2;//为二维数组输出的System.out.println ('原始二维数组如下) ); for(int[]row:chessarr1) for ) intdata:row ) { //\t相当于tabsystem.out.printf(%d\t ',data )。 (//一行输出结束后,换行输出System.out.println );//将二维数组转换为稀疏数组//1,遍历二维数组,得到0以外的数据个数int sum=0; for(intI=0; i chessArr1.length; I ) for(intj=0; j chessArr1.length; j () if ) chessarr1[I][j]!=0) sum; }//system.out.println('0以外的个数Sum=' sum ); //2,对应的稀疏数组intsparsearr [ ] [ ]=new int [ sum1] [3]; //稀疏数组赋值操作sparseArr[0][0]=11; sparseArr[0][1]=11; sparseArr[0][2]=sum; 遍历//二维数组,非0的数值存储在sparseArr中的int count=0; //为了记录这是第几个0以外数据,使用for(intI=0; i chessArr1.length; I ) for(intj=0; j chessArr1.length; j () if ) chessarr1[I][j]!=0) { count; //生成的稀疏数组、数组中的每个元素、包含相关数据的行数、列数以及相应的数值sparseArr[count][0]=i; sparseArr[count][1]=j; sparse arr [ count ] [2]=chessarr1[ I ] [ j ]; }//将稀疏数组输出到System.out.println (; System.out.println ('中得到的稀疏数组为() ); for(intI=0; i sparseArr.length; I ) system.out.printf (% d\t % d\t % d\t\n ',sparseArr[i][0],sparseArr[i][1], 将稀疏arr (/)稀疏矩阵恢复为原始矩阵/*第一步:先读取稀疏数组的第一行,获取数组大小第二步)将稀疏矩阵的最后几行数据分配给原始二维数组(///获取数组大小的intchessarr2[ for(intI=1; i sparseArr.length; I ) { //chessArr2[][]从行和列稀疏数组中获取稀疏arr [ I ] [0] (获取行) )//从值稀疏数组的第三列中获取chessarr2[稀疏arr [ I ] [0] for(int[]row:chessarr2) for ) intdata:row )/(t相当于tab系统. out.printf (% d (t ),data )。 (//一行输出结束后,换行输出System.out.println ); } }

初始化一个2行3列的二维数组,数据结构多维数组 二维数组转稀疏数组,C语言一维数组变为二维数组