特殊矩陣之稀疏矩陣

2021-07-30 23:53:20 字數 2533 閱讀 9249

特殊矩陣的第二種–>稀疏矩陣

稀疏矩陣是指矩陣中有效元素遠遠小於無效值的個數,大概比例就是:

有效值個數/無效值個數~0.05

所以,稀疏矩陣在儲存時只需要儲存有效元素的位置資訊以及值,對於無效值只需要用_invalid來記錄。

#include 

#include

#include

using

namespace

std;

template

class sparsematrix

trituple()

{}size_t _row;

size_t _col;

t _data;

};public:

// 稀疏矩陣的壓縮儲存

sparsematrix(int* arr, size_t row, size_t col, const t& invalid)

: _row(row)

, _col(col)

, _invalid(invalid)}}

sparsematrix()

{}// 訪問稀疏矩陣中row行col中的元素

t& access(int row, int col)

return _invalid;

}// 還原稀疏矩陣

template

friend ostream& operator

<

cout

}// 實現稀疏矩陣的逆置,並給出時間複雜度

sparsematrixtransprot()

++it;}}

return _sm;

}// 實現稀疏矩陣的快速逆置,並給出時間複雜度

sparsematrixfasttransprot()

//計算原矩陣中每一列在新矩陣中的起始位置

int* paddr = new

int[_col];

memset(paddr, 0, sizeof(paddr)*_col);

for(size_t i=1; i<_col>

//放置新元素在新空間

for(size_t i=0; i<_col>

return _sm;

}// 實現稀疏矩陣的加法操作

sparsematrixoperator+(sparsematrix& sp)

else

if(it1->_col > it2->_col)//說明該行該列只有arr2存在有效值

else

//說明該行該列arr1和arr2都存在有效值,需要將_data相加後賦給_sm._vec._data;

}else

if(it1->_row > it2->_row)//說明該行只有arr2存在有效值

else

//說明該行只有arr1存在有效值

}while(it1 != _vec.end())//it1有剩餘

while(it2 != sp._vec.end())//it1有剩餘

return _sm;

}private:

vector

> _vec;

size_t _row;

size_t _col;

t _invalid;

};int main()

, ,,,

,};int arr2[5] = ,,,

,,};sparsematrix s((int *)arr, sizeof(arr)/sizeof(arr[0]), sizeof(arr[0])/sizeof(arr[0][0]),0);

sparsematrix s2((int *)arr2, sizeof(arr2)/sizeof(arr2[0]), sizeof(arr2[0])/sizeof(arr2[0][0]),0);

cout

<

<

<

/cout<

return

0;}

上面的矩陣加法是用一般的二維陣列相加的方法,很麻煩,不僅要判斷行,還要判斷列。所以,可以將二維陣列轉換成一維陣列進行計算。

二維陣列在記憶體中的儲存方式是按照一維陣列來儲存的,將二維陣列的行又當做是乙個一維陣列,相當於是陣列裡面的元素又是乙個陣列。

vec.size())//leftaddr有剩餘

while(ri != sp._

vec.size())//rightaddr有剩餘

return

_sm;

}

特殊矩陣 稀疏矩陣

對於乙個m n的矩陣,設s為矩陣的元素總個數s m n,設t為矩陣中非零元素的個數,滿足t 稀疏矩陣的零元素非常多,且分布無規律,所以稀疏矩陣的壓縮儲存方法為 只儲存矩陣中的非零元素,按照三元組的形式儲存。三元組由非零元素,該元素行下標和該元素列下標三個資料構成,放在乙個列數為3的陣列中。儲存結構又...

陣列的壓縮儲存(特殊矩陣 稀疏矩陣)

其實這裡就不應該說是陣列了,而應該是說行列式,對稱矩陣 a i j a j i 上下三角行列式 對角線以下 以上的元素均為0 帶狀行列式 這個可能不太好理解,舉乙個例子 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 這時看對角線比較舒服,可以看出...

稀疏矩陣的壓縮矩陣

如果乙個矩陣中的大部分元素為零,稱為稀疏矩陣。對於稀疏矩陣而言,時間儲存的資料項很少,如果在程式中使用傳統的二維陣列方式來儲存,則十分浪費儲存空間,且矩陣越大,資源浪費越嚴重。為提記憶體空間利用率,可利用三項式 3 tuple 的資料結構,即把乙個非零項用 i,j,item value 來表示。其中...