稀疏数组的保存优化(java版本)

什么是稀疏矩阵?

 矩阵中,若数值为 0 的元素数目远远多于非 0 元素的数目,并且非 0 元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反,若非 0 元素数目占大多数时,则称该矩阵为稠密矩阵。     这种稀疏矩阵保存有价值的数据较少,所以可以进行压缩,建议一个新的数组,记录每个非0的坐标和值,比如一个n维数组可以建议一个(n+1)维数组来记录值,这样可以大大减少保存成本,但需要注意的是,当元素个数超过1/(n+1)的时候,这种存储算法会超过其原来的成本。

 

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
/*
* 稀疏矩阵算法
* */
public class InfoTest {

    public static void main(String[] args) throws IOException {

          int[][] arraydata =new int[11][11];
          arraydata[1][1]=1;
          arraydata[2][3]=7;
          arraydata[4][7]=13;
          int sum=0;
          for(int row[]:arraydata){
              for(int dt:row){
                  System.out.printf("%d\t",dt);
                  if(dt>0){
                      sum++;
                  }

              }
              System.out.println();
          }
          int[][] record=new int[sum+1][3];
          record[0][0]=arraydata.length;
          record[0][1]=arraydata.length;
          record[0][2]=sum;
          int count=0;
          for(int i=0;i0){
                      count++;
                      record[count][0]=i;
                      record[count][1]=j;
                      record[count][2]=arraydata[i][j];

                  }
              }
          }

        int[][] data_list =new int[11][11];
        for(int i=1;i<=record.length-1;i++){
            int j=record[i][0];
            int k=record[i][1];
            data_list[j][k]=record[i][2];
        }
        System.out.println("**********");
        for(int row[]:data_list){
            for(int dt:row){
                System.out.printf("%d\t",dt);
                if(dt>0){
                    sum++;
                }

            }
            System.out.println();
        }



    }
}

 

你可能感兴趣的:(JAVA,算法,python,人工智能,算法)