稀疏数组

稀疏数组

稀疏数组

稀疏数组就是数组中,大部分的元素值都未被使用(或都为0),在数组中仅有少 部分的空间使用。因此造成内存空间的浪费,为了解决这问题,并且不影响数组中原 有的元素值,我们采用了一种压缩的方式来 表示稀疏数组的内容。 如图二维数组所示,有大部分的空间是无用的。

在这里可以使用稀疏数组进行压缩。其中在稀疏数组中第一部分所记录的是原数组的列数和行数以及元素使用的个数、第二部分所记录的是原数组中元素的位置和内容。经过压缩之后,原来需要声明大小为63的数组,而使用压缩后,只需要声明大小为6*3的数组,仅需18个存储空间。

代码实现

将二维数组变成稀疏数组

public class SparseArray {
    private static final int row = 9;
    private static final int col = 7;
    public static void main(String[] args) {
        // 创建一个原始的二维数组
        int arr[][] = new int[row][col];
        arr[1][1]=3;
        arr[3][0]=1;
        arr[3][1]=4;
        arr[4][2]=7;
        arr[5][5]=5;
        System.out.println("输入原始二维数组-----------------");
        prt(arr);
        System.out.println("-------------------------------");

        // 将二维数组变成稀疏数组
        // 遍历得到非零数据个数
        int sum=0;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                if(arr[i][j]!=0){
                    sum++;
                }
            }
        }
        // 创建对应稀疏数组
        int sparse[][] = new int[sum+1][3];
        // 给稀疏数组赋值
        sparse[0][0] = arr.length;
        sparse[0][1] = arr[0].length;
        sparse[0][2] = sum;

        // 遍历二维数组。将非零值存放到稀疏数组
        int count =0; // 用于记录第几个非零
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                if(arr[i][j]!=0){
                    count++;
                    sparse[count][0] = i;
                    sparse[count][1] = j;
                    sparse[count][2] = arr[i][j];
                }
            }
        }
        // 输出稀疏数组
        System.out.println("输出稀疏数组");
        prt(sparse);

        // 将稀疏数组还原成二维数组
        int arr2[][] =new int[sparse[0][0]][sparse[0][1]];
        for (int i = 1; i <sparse.length ; i++) {
            arr2[sparse[i][0]][sparse[i][1]] = sparse[i][2];
        }
        System.out.println("输出还原的二维数组");
        prt(arr2);
    }
    public static void prt(int [][] arr ){
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j]+" ");
            }
            System.out.println("\n");
        }
    }
}

复制代码
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100883.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • vuex使用教程(最好最详细的乒乓教程)

    最详细的Vuex教程什么是Vuex?vuex是一个专门为vue.js设计的集中式状态管理架构。状态?我把它理解为在data中的属性需要共享给其他vue组件使用的部分,就叫做状态。简单的说就是data中需要共用的属性。引入Vuex(前提是已经用Vue脚手架工具构建好项目)1、利用npm包管理工具,进行安装vuex。在控制命令行中输入下边的命令就可以了。npminstallvuex

    2022年4月14日
  • 异美旅游

    异美旅游

    2022年4月27日
  • 用或启用Windows自动更新命令行

    用或启用Windows自动更新命令行

    2022年3月2日
  • python创建数组的方法_python数组和列表

    python创建数组的方法_python数组和列表另见数组创建相关API简介创建数组有5种常规机制:从其他Python结构(例如,列表,元组)转换numpy原生数组的创建(例如,arange、ones、zeros等)从磁盘读取数组,无论是标准格式还是自定义格式通过使用字符串或缓冲区从原始字节创建数组使用特殊库函数(例如,random)本节不包括复制,连接或以其他方式扩展或改变现有数组的方法。它也不会涵盖创建对象数组或结构化数组。这些都包含在他们自己的章节中。将Pythonarray_like对象转换为Numpy数组通常,在Pytho

    2022年10月30日
  • mac phpstorm 2021.4.14 激活码_通用破解码

    mac phpstorm 2021.4.14 激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
  • Db4o数据库:快速入门「建议收藏」

    Db4o数据库:快速入门「建议收藏」偶遇Db4o,非常有感觉,就推荐给大家吧。它是一种开源对象数据库。百分之百的面对对象,操作数据库就像操作对象一样简单快速。它有Java和.Net两个版本,在其官网可下载安装包及源代码。以.Net版本为例,给大家介绍Db4o的使用。安装完成后,在omn文件夹下,有一个VisualStudio的插件(ObjectManagerEnterprise),利用它可以像其他数据库工具一样,可以快速访问对

    2022年7月21日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号