【数据结构与算法】数组应用3:稀疏矩阵压缩(Java实现)

简介:

    直接看下面的程序代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package  chapter02;
 
import  java.util.Arrays;
 
/*
  * 稀疏矩阵压缩(简单版)
  */
public  class  CH02_05 {
     public  static  void  main(String[] args) {
         //定义一个稀疏矩阵
         int [][] arr = 
             {
                     { 25 0 0 32 0 , - 25 },
                     { 0 33 77 0 0 0 },
                     { 0 0 0 55 0 0 },
                     { 0 0 0 0 0 0 },
                     { 101 0 0 0 0 0 },
                     { 0 0 38 0 0 0 }
             };
         
         //输出稀疏矩阵
         for ( int  i =  0 ; i < arr.length; i++){
             System.out.println(Arrays.toString(arr[i]));
         }
         
         //压缩稀疏矩阵的准备工作
         int  rows = arr.length;        //稀疏矩阵的行
         int  cols = arr[ 0 ].length;     //稀疏矩阵的列
         int  real =  0 ;                 //稀疏矩阵非0元素
         //遍历获取稀疏矩阵的非0元素个数
         for ( int  i =  0 ; i < rows; i++){
             for ( int  j =  0 ; j < cols; j++){
                 if (arr[i][j] !=  0 ){
                     real +=  1 ;
                 }
             }
         }
         //定义一个数组,用来保存压缩后的稀疏矩阵
         int [][] arrResult =  new  int [real+ 1 ][ 3 ];
         //初始化arrResult
         for ( int  i =  0 ; i < arrResult.length; i++){
             Arrays.fill(arrResult[i],  0 );
         }
         //在arrResult中保存稀疏矩阵的基本信息
         //arrResult[0][0]:稀疏矩阵的行数   arrResult[0][1]:稀疏矩阵的列数     arrResult[0][2]:稀疏矩阵非0元素个数
         arrResult[ 0 ][ 0 ] = rows;
         arrResult[ 0 ][ 1 ] = cols;
         arrResult[ 0 ][ 2 ] = real;
         //输出初始化后的arrResult
         System.out.println();
         for ( int  i =  0 ; i < arrResult.length; i++){
             System.out.println(Arrays.toString(arrResult[i]));
         }
         
         //开始压缩稀疏矩阵
         int  k =  1 ;    //用来记录arrResult到第几行,因为第0行已经用来保存基本信息,所以从第1行开始
         for ( int  i =  0 ; i < rows; i++){
             for ( int  j =  0 ; j < cols; j++){
                 if (arr[i][j] !=  0 ){
                     arrResult[k][ 0 ] = i;
                     arrResult[k][ 1 ] = j;
                     arrResult[k][ 2 ] = arr[i][j];
                     k++;
                 }
             }
         }
         
         //输出压缩后的稀疏矩阵
         System.out.println();
         for ( int  i =  0 ; i < arrResult.length; i++){
             System.out.println(Arrays.toString(arrResult[i]));
         }
 
     }
}

    执行结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[25, 0, 0, 32, 0, -25]
[0, 33, 77, 0, 0, 0]
[0, 0, 0, 55, 0, 0]
[0, 0, 0, 0, 0, 0]
[101, 0, 0, 0, 0, 0]
[0, 0, 38, 0, 0, 0]
 
[6, 6, 8]
[0, 0, 0]
[0, 0, 0]
[0, 0, 0]
[0, 0, 0]
[0, 0, 0]
[0, 0, 0]
[0, 0, 0]
[0, 0, 0]
 
[6, 6, 8]
[0, 0, 25]
[0, 3, 32]
[0, 5, -25]
[1, 1, 33]
[1, 2, 77]
[2, 3, 55]
[4, 0, 101]
[5, 2, 38]



本文转自 xpleaf 51CTO博客,原文链接:http://blog.51cto.com/xpleaf/1976965,如需转载请自行联系原作者
相关文章
|
24天前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
60 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
19天前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
38 3
|
25天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的优化算法及其应用
【10月更文挑战第8天】 本文将探讨深度学习中常用的优化算法,包括梯度下降法、Adam和RMSProp等,介绍这些算法的基本原理与应用场景。通过实例分析,帮助读者更好地理解和应用这些优化算法,提高深度学习模型的训练效率与性能。
124 63
|
3天前
|
机器学习/深度学习 JSON 算法
二叉树遍历算法的应用场景有哪些?
【10月更文挑战第29天】二叉树遍历算法作为一种基础而重要的算法,在许多领域都有着不可或缺的应用,它为解决各种复杂的问题提供了有效的手段和思路。随着计算机科学的不断发展,二叉树遍历算法也在不断地被优化和扩展,以适应新的应用场景和需求。
8 0
|
27天前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
26 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
14天前
|
存储 算法 搜索推荐
这些算法在实际应用中有哪些具体案例呢
【10月更文挑战第19天】这些算法在实际应用中有哪些具体案例呢
23 1
|
20天前
|
机器学习/深度学习 人工智能 算法
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
54 0
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
|
9天前
|
存储 NoSQL Redis
Redis常见面试题:ZSet底层数据结构,SDS、压缩列表ZipList、跳表SkipList
String类型底层数据结构,List类型全面解析,ZSet底层数据结构;简单动态字符串SDS、压缩列表ZipList、哈希表、跳表SkipList、整数数组IntSet
|
11天前
|
存储 JSON 算法
TDengine 检测数据最佳压缩算法工具,助你一键找出最优压缩方案
在使用 TDengine 存储时序数据时,压缩数据以节省磁盘空间是至关重要的。TDengine 支持用户根据自身数据特性灵活指定压缩算法,从而实现更高效的存储。然而,如何选择最合适的压缩算法,才能最大限度地降低存储开销?为了解决这一问题,我们特别推出了一个实用工具,帮助用户快速判断并选择最适合其数据特征的压缩算法。
22 0
|
14天前
|
监控 算法 数据挖掘
HyperLogLog算法有哪些应用场景呢
【10月更文挑战第19天】HyperLogLog算法有哪些应用场景呢
12 0