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

4 篇文章 0 订阅

什么是稀疏矩阵?

 矩阵中,若数值为 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;i<arraydata.length;i++){
              for(int j=0;j<arraydata.length;j++){
                  if(arraydata[i][j]>0){
                      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();
        }



    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值