日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

十四、矩阵的快速转置算法

發(fā)布時間:2025/3/21 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 十四、矩阵的快速转置算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

十四、矩陣的快速轉(zhuǎn)置算法

文章目錄

  • 十四、矩陣的快速轉(zhuǎn)置算法
    • 題目描述
    • 解題思路
    • 上機(jī)代碼

題目描述

數(shù)據(jù)壓縮是提高傳輸、存儲效率一種技術(shù)。教材第5章介紹了兩種簡單的壓縮存儲方法。本實驗要求實現(xiàn)三元組順序表表示下的矩陣快速轉(zhuǎn)置算法。

輸入:

? 稀疏矩陣的行數(shù)、列數(shù)、非零元個數(shù)(三個數(shù)都大于0)

? 以行為主序輸入稀疏矩陣三元組表

輸出:

? 輔助數(shù)組num[ ]

? 輔助數(shù)組cpot[ ]

? 以行為主序輸出對應(yīng)的轉(zhuǎn)置矩陣三元組表

測試輸入期待的輸出時間限制內(nèi)存限制額外進(jìn)程
測試用例 16 7 8
1 2 12
1 3 9
3 1 -3
3 6 14
4 3 24
5 2 18
6 1 15
6 4 -7
num:2,2,2,1,0,1,0,
cpot:1,3,5,7,8,8,9,
1,3,-3
1,6,15
2,1,12
2,5,18
3,1,9
3,4,24
4,6,-7
6,3,14
1秒256KB0
測試用例 25 4 6
2 1 1
2 2 2
4 2 2
4 3 3
5 3 3
5 4 4
num:1,2,2,1,
cpot:1,2,4,6,
1,2,1
2,2,2
2,4,2
3,4,3
3,5,3
4,5,4
1秒64M0

解題思路

稀疏矩陣的快速轉(zhuǎn)置算法在教材(紫皮書)上已經(jīng)有了很詳細(xì)的介紹,我們只需要按照方法一步一步復(fù)現(xiàn)出來就好了。

  • 教材第 98 頁,定義了三元組順序表和稀疏矩陣
  • 第 99 頁,詳細(xì)介紹了快速轉(zhuǎn)置算法的原理:按照 a.data 中三元組的次序進(jìn)行轉(zhuǎn)置,并將轉(zhuǎn)置后的三元組置于 b 中恰當(dāng)?shù)奈恢?/strong>
  • 第 100 頁,給出了快速轉(zhuǎn)置算法的具體實現(xiàn)

上機(jī)代碼

#include<cstdio> #include<stack> #include<cstring> #include<cstdlib> #include<iostream> using namespace std; #define MAXSIZE 12500//定義三元組 typedef struct {int i, j;int e; }Triple; //定義稀疏矩陣 typedef struct {Triple data[MAXSIZE + 1];int mu, nu, tu; }TSMatrix;//兩個輔助數(shù)組 int num[1010] = { 0 }, cpot[1010] = { 0 };int main() {TSMatrix M, T;int row = 0, col = 0;int t = 0, p = 0, q = 0;//輸入三元組表cin >> M.mu >> M.nu >> M.tu;for (int i = 1; i <= M.tu; i++){cin >> M.data[i].i >> M.data[i].j >> M.data[i].e;}/* 快速轉(zhuǎn)置算法 */T.nu = M.mu;T.mu = M.nu;T.tu = M.tu;if (T.tu){for (col = 1; col <= M.nu; ++col)num[col] = 0;for (t = 1; t <= M.tu; ++t)++num[M.data[t].j];cpot[1] = 1;cpot[0] = 1;for (col = 2; col <= M.nu; ++col)cpot[col] = cpot[col - 1] + num[col - 1];for (p = 1; p <= M.tu; p++){col = M.data[p].j;q = cpot[col];T.data[q].i = M.data[p].j;T.data[q].j = M.data[p].i;T.data[q].e = M.data[p].e;++cpot[col];}}//輸出輔助數(shù)組cout << "num:";for (int i = 1; i <= M.nu; i++)cout << num[i] << ",";cout << endl;cout << "cpot:";for (int i = 0; i < M.nu; i++)cout << cpot[i] << ",";cout << endl;//輸出轉(zhuǎn)置矩陣三元組表for (int i = 1; i <= M.tu; i++)cout << T.data[i].i << "," << T.data[i].j << "," << T.data[i].e << endl;return 0; }

總結(jié)

以上是生活随笔為你收集整理的十四、矩阵的快速转置算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。