【数据结构与算法】数组应用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,如需转载请自行联系原作者
相关文章
|
2月前
|
人工智能 算法 Java
Java与AI驱动区块链:构建智能合约与去中心化AI应用
区块链技术和人工智能的融合正在开创去中心化智能应用的新纪元。本文深入探讨如何使用Java构建AI驱动的区块链应用,涵盖智能合约开发、去中心化AI模型训练与推理、数据隐私保护以及通证经济激励等核心主题。我们将完整展示从区块链基础集成、智能合约编写、AI模型上链到去中心化应用(DApp)开发的全流程,为构建下一代可信、透明的智能去中心化系统提供完整技术方案。
283 3
|
4月前
|
存储 数据采集 搜索推荐
Java 大视界 -- Java 大数据在智慧文旅旅游景区游客情感分析与服务改进中的应用实践(226)
本篇文章探讨了 Java 大数据在智慧文旅景区中的创新应用,重点分析了如何通过数据采集、情感分析与可视化等技术,挖掘游客情感需求,进而优化景区服务。文章结合实际案例,展示了 Java 在数据处理与智能推荐等方面的强大能力,为文旅行业的智慧化升级提供了可行路径。
Java 大视界 -- Java 大数据在智慧文旅旅游景区游客情感分析与服务改进中的应用实践(226)
|
4月前
|
存储 监控 数据可视化
Java 大视界 -- 基于 Java 的大数据可视化在企业生产运营监控与决策支持中的应用(228)
本文探讨了基于 Java 的大数据可视化技术在企业生产运营监控与决策支持中的关键应用。面对数据爆炸、信息孤岛和实时性不足等挑战,Java 通过高效数据采集、清洗与可视化引擎,助力企业构建实时监控与智能决策系统,显著提升运营效率与竞争力。
|
2月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
143 8
|
3月前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
568 12
|
3月前
|
运维 监控 JavaScript
基于 Node.js 图结构的局域网设备拓扑分析算法在局域网内监控软件中的应用研究
本文探讨图结构在局域网监控系统中的应用,通过Node.js实现设备拓扑建模、路径分析与故障定位,提升网络可视化、可追溯性与运维效率,结合模拟实验验证其高效性与准确性。
254 3
|
2月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
3月前
|
机器学习/深度学习 资源调度 算法
遗传算法模型深度解析与实战应用
摘要 遗传算法(GA)作为一种受生物进化启发的优化算法,在复杂问题求解中展现出独特优势。本文系统介绍了GA的核心理论、实现细节和应用经验。算法通过模拟自然选择机制,利用选择、交叉、变异三大操作在解空间中进行全局搜索。与梯度下降等传统方法相比,GA不依赖目标函数的连续性或可微性,特别适合处理离散优化、多目标优化等复杂问题。文中详细阐述了染色体编码、适应度函数设计、遗传操作实现等关键技术,并提供了Python代码实现示例。实践表明,GA的成功应用关键在于平衡探索与开发,通过精心调参维持种群多样性同时确保收敛效率
|
3月前
|
机器学习/深度学习 边缘计算 人工智能
粒子群算法模型深度解析与实战应用
蒋星熠Jaxonic是一位深耕智能优化算法领域多年的技术探索者,专注于粒子群优化(PSO)算法的研究与应用。他深入剖析了PSO的数学模型、核心公式及实现方法,并通过大量实践验证了其在神经网络优化、工程设计等复杂问题上的卓越性能。本文全面展示了PSO的理论基础、改进策略与前沿发展方向,为读者提供了一份详尽的技术指南。
粒子群算法模型深度解析与实战应用
|
3月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
453 1

热门文章

最新文章