最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實(shí)現(xiàn)稀疏矩陣的壓縮與解壓的方法

 更新時(shí)間:2022年03月30日 09:06:42   作者:三國(guó)小夢(mèng)  
這篇文章主要介紹了java實(shí)現(xiàn)稀疏矩陣的壓縮與解壓 ,把該稀疏矩陣壓縮以三元組形式表示并以文件形式保存,再寫另一個(gè)程序讀取文件中的信息把壓縮后的三元組還原成原來(lái)的稀疏矩陣,需要的朋友可以參考下

任務(wù)要求

把棋盤當(dāng)作一個(gè)稀疏矩陣,0表示沒(méi)棋,1表示黑棋,2表示藍(lán)棋。

把該稀疏矩陣壓縮以三元組形式表示并以文件形式保存,再寫另一個(gè)程序讀取文件中的信息把壓縮后的三元組還原成原來(lái)的稀疏矩陣。

其中三元組的第一行用來(lái)存儲(chǔ)原始稀疏矩陣的行數(shù)、列數(shù)和有效的數(shù)據(jù)個(gè)數(shù),其余行用來(lái)存儲(chǔ)有效的非0數(shù)據(jù)

思路分析

稀疏矩陣的壓縮

  • 遍歷原始的稀疏矩陣,得到有效的數(shù)據(jù)個(gè)數(shù)sum
  • 根據(jù)sum創(chuàng)建三元組new int [sum+1] [3](即sum+1行3列的二維數(shù)組)
  • 將二維數(shù)據(jù)的有效數(shù)據(jù)存入三元組中

稀疏矩陣的解壓

  • 先讀取三元組的第一行,根據(jù)第一行的數(shù)據(jù)創(chuàng)建一個(gè)二維數(shù)組
  • 再讀取三元組的后面幾行,并賦值給該二維數(shù)組即可

代碼實(shí)現(xiàn)

稀疏矩陣的壓縮

package zone.lxy.sparsearray;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
/*
* 把稀疏矩陣壓縮成三元組
* */
public class Compress {
    public static void main(String[] args) throws IOException {
        // 創(chuàng)建一個(gè)稀疏矩陣11*11
        // 0表示沒(méi)有棋子
        // 1表示黑子
        // 2表示白子
        int[][] chessArr1 = new int[11][11];
        chessArr1[1][2] = 1;
        chessArr1[2][3] = 2;
        // 輸出原始的稀疏矩陣
        System.out.println("原始的稀疏矩陣:");
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                System.out.print(chessArr1[i][j] + " ");
            }
            System.out.println();
        }
        // 對(duì)稀疏矩陣壓縮存儲(chǔ)
        // 1.先遍歷稀疏矩陣記錄非0元素的個(gè)數(shù)
        int sum = 0;
                if (chessArr1[i][j] != 0) {
                    sum++;
                }
        // 2.創(chuàng)建對(duì)應(yīng)的三元組并初始化
        int[][] sparseArr = new int[sum + 1][3];
        sparseArr[0][0] = 11;
        sparseArr[0][1] = 11;
        sparseArr[0][2] = sum;
        // 3.把稀疏矩陣中的非0元素放到三元組中
        int count = 1;
                    sparseArr[count][0] = i;
                    sparseArr[count][1] = j;
                    sparseArr[count][2] = chessArr1[i][j];
                    count++;
        // 輸出生成的三元組
        System.out.println("得到壓縮后的三元組:");
        for (int i = 0; i < sparseArr.length; i++) {
            System.out.printf("%-2d %-2d %-2d\n", sparseArr[i][0], sparseArr[i][1], sparseArr[i][2]);
        // 把該三元組以文件形式保存起來(lái),壓縮完成
        FileOutputStream fos = new FileOutputStream("map.data");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(sparseArr);
        oos.close();
        fos.close();
    }
}
// 輸出結(jié)果
原始的稀疏矩陣:
0 0 0 0 0 0 0 0 0 0 0 
0 0 1 0 0 0 0 0 0 0 0 
0 0 0 2 0 0 0 0 0 0 0 
得到壓縮后的三元組:
11 11 2 
1  2  1 
2  3  2 

稀疏矩陣的解壓

package zone.lxy.sparsearray;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
/*
* 把三元組還原成稀疏矩陣
* */
public class DeCompress {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        // 讀取文件并賦值
        FileInputStream fis = new FileInputStream("map.data");
        ObjectInputStream ois = new ObjectInputStream(fis);
        int[][] sparseArr = (int[][]) ois.readObject();
        ois.close();
        fis.close();
        // 輸出文件中的存儲(chǔ)的三元組
        System.out.println("得到壓縮后的三元組:");
        for (int i = 0; i < sparseArr.length; i++) {
            System.out.printf("%-2d %-2d %-2d\n", sparseArr[i][0], sparseArr[i][1], sparseArr[i][2]);
        }
        // 先讀取三元組的第一行,根據(jù)第一行數(shù)據(jù)創(chuàng)建原始的稀疏矩陣
        int row = sparseArr[0][0];
        int col = sparseArr[0][1];
        int[][] chessArr = new int[row][col];
        // 從第二行開(kāi)始讀取三元組并賦值給稀疏矩陣
        for (int a = 1; a <sparseArr.length; a++) {
            int i = sparseArr[a][0];
            int j = sparseArr[a][1];
            int val = sparseArr[a][2];
            chessArr[i][j] = val;
        }
        // 輸出解壓后的稀疏矩陣
        System.out.println("解壓后的二維數(shù)組:");
        for (int[] i : chessArr) {
            for (int item : i) {
                System.out.printf("%d ", item);
            }
            System.out.println();
        }
    }
}
// 輸出結(jié)果
得到壓縮后的三元組:
11 11 2 
1  2  1 
2  3  2 
解壓后的二維數(shù)組:
0 0 0 0 0 0 0 0 0 0 0 
0 0 1 0 0 0 0 0 0 0 0 
0 0 0 2 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 

到此這篇關(guān)于java實(shí)現(xiàn)稀疏矩陣的壓縮與解壓 的文章就介紹到這了,更多相關(guān)java稀疏矩陣壓縮內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JAVA項(xiàng)目常用異常處理匯總

    JAVA項(xiàng)目常用異常處理匯總

    這篇文章主要介紹了JAVA項(xiàng)目常用異常處理匯總,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java中的do while循環(huán)控制語(yǔ)句基本使用

    Java中的do while循環(huán)控制語(yǔ)句基本使用

    這篇文章主要介紹了Java中的do while循環(huán)控制語(yǔ)句基本使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java中HTTP GET方法調(diào)用帶有body的問(wèn)題解決

    Java中HTTP GET方法調(diào)用帶有body的問(wèn)題解決

    這篇文章主要為大家詳細(xì)介紹了Java如何解決HTTP GET方法調(diào)用帶有body的問(wèn)題,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下
    2024-02-02
  • Java實(shí)現(xiàn)英文猜詞游戲的示例代碼

    Java實(shí)現(xiàn)英文猜詞游戲的示例代碼

    這篇文章主要介紹了如何用Java編寫一個(gè)英文猜詞游戲,可以用來(lái)背英語(yǔ)單詞。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-02-02
  • Java 實(shí)戰(zhàn)項(xiàng)目錘煉之網(wǎng)上花店商城的實(shí)現(xiàn)流程

    Java 實(shí)戰(zhàn)項(xiàng)目錘煉之網(wǎng)上花店商城的實(shí)現(xiàn)流程

    讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+jsp+servlet+mysql+ajax實(shí)現(xiàn)一個(gè)網(wǎng)上花店商城系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • Java性能工具JMeter實(shí)現(xiàn)上傳與下載腳本編寫

    Java性能工具JMeter實(shí)現(xiàn)上傳與下載腳本編寫

    性能測(cè)試工作中,文件上傳也是經(jīng)常見(jiàn)的性能壓測(cè)場(chǎng)景之一,那么 JMeter 文件上傳下載腳本怎么做,本文詳細(xì)的來(lái)介紹一下,感興趣的可以了解一下
    2021-07-07
  • SpringBoot實(shí)現(xiàn)獲取客戶端IP地理位置

    SpringBoot實(shí)現(xiàn)獲取客戶端IP地理位置

    在當(dāng)今互聯(lián)的世界中,了解客戶端的地理位置對(duì)于提供個(gè)性化服務(wù)和增強(qiáng)用戶體驗(yàn)至關(guān)重要,使用本文為大家介紹了SpringBoot獲取客戶端IP地理位置的相關(guān)方法,需要的小伙伴可以參考下
    2023-11-11
  • Spark-Sql入門程序示例詳解

    Spark-Sql入門程序示例詳解

    Spark?SQL?作為?Spark?四大核心組件之一,主要用于處理結(jié)構(gòu)化數(shù)據(jù)或半結(jié)構(gòu)化數(shù)據(jù),它支持在Spark?中使用?SQL?對(duì)數(shù)據(jù)進(jìn)行查詢,本文給大家介紹Spark-Sql入門程序,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • SpringCloud?LoadBalancerClient?負(fù)載均衡原理解析

    SpringCloud?LoadBalancerClient?負(fù)載均衡原理解析

    LoadBalancerClient?是?SpringCloud?提供的一種負(fù)載均衡客戶端,Ribbon?負(fù)載均衡組件內(nèi)部也是集成了?LoadBalancerClient?來(lái)實(shí)現(xiàn)負(fù)載均衡,本文給大家深入解析?LoadBalancerClient?接口源碼,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • Java如何實(shí)現(xiàn)單鏈表的增刪改查

    Java如何實(shí)現(xiàn)單鏈表的增刪改查

    這篇文章主要給大家介紹了關(guān)于Java如何實(shí)現(xiàn)單鏈表的增刪改查的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評(píng)論

浦江县| 辉县市| 当阳市| 房产| 蒙阴县| 怀化市| 县级市| 个旧市| 瑞昌市| 牡丹江市| 高邑县| 上饶县| 息烽县| 林西县| 马公市| 贞丰县| 白沙| 开远市| 宁河县| 静安区| 宜城市| 德钦县| 台湾省| 双江| 荥阳市| 吴桥县| 崇州市| 赤水市| 达孜县| 札达县| 榆林市| 威远县| 荥经县| 项城市| 泰安市| 灌南县| 仙桃市| 裕民县| 右玉县| 沂水县| 如皋市|