十四、矩阵的快速转置算法
生活随笔
收集整理的這篇文章主要介紹了
十四、矩阵的快速转置算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
十四、矩陣的快速轉置算法
文章目錄
- 十四、矩陣的快速轉置算法
- 題目描述
- 解題思路
- 上機代碼
題目描述
數據壓縮是提高傳輸、存儲效率一種技術。教材第5章介紹了兩種簡單的壓縮存儲方法。本實驗要求實現三元組順序表表示下的矩陣快速轉置算法。
輸入:
? 稀疏矩陣的行數、列數、非零元個數(三個數都大于0)
? 以行為主序輸入稀疏矩陣三元組表
輸出:
? 輔助數組num[ ]
? 輔助數組cpot[ ]
? 以行為主序輸出對應的轉置矩陣三元組表
| 測試用例 1 | 6 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秒 | 256KB | 0 |
| 測試用例 2 | 5 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秒 | 64M | 0 |
解題思路
稀疏矩陣的快速轉置算法在教材(紫皮書)上已經有了很詳細的介紹,我們只需要按照方法一步一步復現出來就好了。
- 教材第 98 頁,定義了三元組順序表和稀疏矩陣
- 第 99 頁,詳細介紹了快速轉置算法的原理:按照 a.data 中三元組的次序進行轉置,并將轉置后的三元組置于 b 中恰當的位置
- 第 100 頁,給出了快速轉置算法的具體實現
上機代碼
#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;//兩個輔助數組 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;}/* 快速轉置算法 */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];}}//輸出輔助數組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;//輸出轉置矩陣三元組表for (int i = 1; i <= M.tu; i++)cout << T.data[i].i << "," << T.data[i].j << "," << T.data[i].e << endl;return 0; }總結
以上是生活随笔為你收集整理的十四、矩阵的快速转置算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 十三、判断出栈序列
- 下一篇: 十五、稀疏矩阵的乘法运算