稀疏矩陣的轉置與快速轉置

2021-07-12 00:27:43 字數 1744 閱讀 8643

假設在m*n的矩陣中,有t個元素不為0。令稀疏因子s=t/(m*n),通常認為s<0.05時稱為稀疏矩陣。

有時為了節省儲存空間,可以對這類矩陣進行壓縮儲存。所謂的壓縮儲存就是,為多個相同的值分配儲存在乙個空間,對零元不分配空間。而稀疏矩陣是只儲存有效值,無效值只分配乙個空間。

在這裡我們用乙個順序表vector儲存稀疏矩陣的有效值的行,列,值三個元素。

struct triple

triple()

:_cow(0)

, _col(0)

};

class sparsematrix

}} }

protected:

vector> _a;

int _cow;//矩陣行數

int _col;//矩陣列數

t _invalue;//無效值

};

下面我們來討論一下稀疏矩陣的轉置,轉置運算時最簡單的一種矩陣運算。要得到轉置矩陣,我們只要做到三點。

將矩陣的行列值相互交換

每個三元組的i和j相互交換

重排三元組之間的次序便可以實現轉置

sparsematrixtransport()

index++;

}} return tmp;

}

對於矩陣的轉置,我們首先得要了解轉置後行列的變化。轉置前的行變成了轉置後的列。對於三元組順序表中的元素是遵循行優先儲存的。所以要得到轉置後的每一行的有效值,只要迴圈遍歷轉置前的每一列即可。

矩陣的轉置可以優化,使用快速轉置。

sparsematrixfasttransport()

}index = 0;

while (index < _a.size())

return tmp;

}

快速轉置的思想是開闢兩個陣列用來存每一行有效值的個數,另乙個用來存每個有效值在轉置後順序表vector中的起始位置。使用陣列可以快速找到有效資料在轉置後順序表中的位置

以下是完整**:

#pragma once

#include#includeusing namespace std;

templatestruct triple

triple()

:_cow(0)

, _col(0) };

templateclass sparsematrix

}} }

sparsematrix()

:_cow(0)

, _col(0)

{} sparsematrixtransport()

index++;

}} return tmp;

} sparsematrixfasttransport()

}index = 0;

while (index < _a.size())

return tmp;

} void display()

else

}cout << endl;

} cout << endl;

}protected:

vector> _a;

int _cow;//矩陣行數

int _col;//矩陣列數

t _invalue;

};

稀疏矩陣的轉置(矩陣轉置和快速轉置)

實現矩陣的轉置 1.將矩陣的行列值相互轉換。2.將每個三元組中的i和j交換。3.重排三元組之間的次序便可實現矩陣的轉置。void transposesmatrix tsmatrix m,tsmatrix t return transposesmatrix快速轉置的原理是 如果能預先確定矩陣m中每一列...

稀疏矩陣快速轉置

include include typedef structmatrix typedef int spmatrix 100 3 三元陣列別名 spmatrix a,b 建立兩個三元陣列,a為轉置前,b為轉置後 int pos 1000 num 1000 int getthree matrix s,i...

稀疏矩陣快速轉置

稀疏矩陣的儲存不宜用二維陣列儲存每個元素,那樣的話會浪費很多的儲存空間。所以可以使用乙個一維陣列儲存其中的非零元素。這個一維陣列的元素型別是乙個三元組,由非零元素在該稀疏矩陣中的位置 行號和列號對 以及該元組的值構成。而矩陣轉置就是將矩陣行和列上的元素對換。參考演算法5.1中的具體做法,令mu和nu...