zoukankan      html  css  js  c++  java
  • 稀疏矩阵

    基本介绍

    当一个数组里面有大量重复的的元素时,比如0,可以用稀疏矩阵来保存该数组

    图解

    转换思路

    1. 记录数组总共有几行,几列,以及几个不同值
    2. 把不同值的行,列,以及值,存入一个规模较小的数组,从而缩小规模

    代码,Java实现

    定义上图中的二维数组

    //定义上图中的二维数组
    int[][] arry1 = new int[6][7];
    arry1[0][3] = 22;
    arry1[0][6] = 15;
    arry1[1][1] = 11;
    arry1[1][6] = 17;
    arry1[2][3] = -6;
    arry1[3][6] = 39;
    arry1[4][0] = 91;
    arry1[5][2] = 28;
    

    数组转换成稀疏数组

      public static int[][] array2sparese(int[][] arry){
        int count = 0;
        //先遍历一遍数组,确定稀疏数组的长度
        for(int[] row : arry){
            for(int data : row){
                if(data != 0){
                    count++;
                }
            }
        }
        //初始化稀疏数组
        int[][] sparese = new int[count+1][3];
        //存入原始数组row,col,有效个数
        sparese[0][0] = arry.length;
        sparese[0][1] = arry[0].length;
        sparese[0][2] = count;
        //遍历原始数组,存入有效数字
        int sum = 0;
        for(int i = 0; i < arry.length; i ++){
            for(int j = 0; j < arry[i].length; j++){
                if(arry[i][j] != 0){
                    sum++;
                    sparese[sum][0] = i;
                    sparese[sum][1] = j;
                    sparese[sum][2] = arry[i][j];
                }
            }
        }
        return sparese;
    }
    

    稀疏数组转换成数组

    //稀疏数组转换成普通数组
    public static int[][] sparese2array(int[][] sparese){
        //读取信息,创建数组
        int[][] arry = new int[sparese[0][0]][sparese[0][1]];
        //遍历稀疏数组,然后赋值
        for(int i = 1; i < sparese.length; i++){
            arry[sparese[i][0]][sparese[i][1]] = sparese[i][2];
        }
        return arry;
    }
    

    测试,运行

    //输出原始数组看看
    System.out.println("=======原始数组=======");
    for(int[] row : arry1){
        for(int data : row){
            System.out.print(data + " ");
        }
        System.out.println();
    }
    //转换成稀疏数组
    int[][] sparese = array2sparese(arry1);
    //输出看看
    System.out.println("=======稀疏数组=======");
    for(int[] row : sparese){
        for(int data : row){
            System.out.print(data + " ");
        }
        System.out.println();
    }
    //转回来
    int[][] arry2 = sparese2array(sparese);
    //输出看看
    System.out.println("=======稀疏数组变回原始数组=======");
    for(int[] row : arry2){
        for(int data : row){
            System.out.print(data + " ");
        }
        System.out.println();
    }
    

    输出结果


  • 相关阅读:
    django admin site配置(二)
    MyEclipse中无法将SVN检出来的项目部署到tomcat中
    遍历目录树,清理编译目录
    axis2学习, ant 构建axis2 ws
    [置顶] 2013 Multi-University Training Contest 8
    Cocos2d-x 关于在iOS平台真机测试的一些注意
    SharePoint 2013的100个新功能之社交
    路由共享上网原理
    red ant
    nginx正向代理访问百度地图API
  • 原文地址:https://www.cnblogs.com/yxm2020/p/12592798.html
Copyright © 2011-2022 走看看