稀疏矩陣是指矩陣中大多數元素為零的矩陣。從直觀上講,當非零元素個數低於總元素的30%,這樣的矩陣被稱為稀疏矩陣。
稀疏矩陣的表示方法
ex1a=
一 三元組表示法
rowcole1
12122
1393
31-34
36145
43246
52187
61158
74-7 我們在實現經典矩陣轉置時
for(int i=0;i而我們在實現稀疏矩陣用三元組表示時,也可以把行列互換,但轉置之後三元組變得無序,重新排序三元組影響演算法的效率。
有兩種方法實現
①多次掃瞄,設乙個標記數k,標記在轉置矩陣的位置,多次掃瞄三元組,將列數為col(1<=col<=n)的依次放入轉置矩陣中,i++;
核心演算法為
int k=1;
for(int col=1;col<=n;col++)
for(int i=1;i<=a.len;i++)
}
即可實現轉置後按順序排列
②一次掃瞄轉置
我們可以建立兩個陣列num[i],postion[i],
num[i]用來存放待轉置矩陣列為i的個數,
positon[i]用來存放轉置矩陣放置列為i的個數。
核心演算法
for(int i=1;i<=a.n;i++)
num[i]=0;
for(int i=1;i<=a.len;i++)
num[a[i].col]++;//初始化num
int positon[1]=1;
for(int i=2;i<=a.n;i++)
//初始化positon
//我們知道列數為i的轉置後的陣列位置positon[i],接著position[i]++;指向下乙個列數為i的儲存位置
for(int i=1;i<=a.len;i++)
}
第一種演算法有兩層for迴圈時間複雜度=o(a.n*a.len);
第二種演算法有一層for迴圈時間複雜度為o(a.n+a.len);
演算法在時間複雜度的提公升是犧牲空間為代價的。
稀疏矩陣表示法之三,十字鍊錶表示法
typedef strucr node
olnode,*olink;
typedef struct
crosslist;
//核心**
//對列同理插入
資料結構實驗之陣列二 稀疏矩陣
include include using namespace std typedef struct arry int main cin qq for i 0 i time limit 5ms memory limit 1000k 對於乙個n n的稀疏矩陣m 1 n 1000 採用三元組順序表儲存表...
資料結構實驗之陣列二 稀疏矩陣
time limit 5ms memory limit 1000k 有疑問?點這裡 對於乙個n n的稀疏矩陣m 1 n 1000 採用三元組順序表儲存表示,查詢從鍵盤輸入的某個非零資料是否在稀疏矩陣中,如果存在則輸出ok,不存在則輸出error。稀疏矩陣示例圖如下 連續輸入多組資料,每組資料的第一行...
資料結構實驗之陣列二 稀疏矩陣
time limit 5ms memory limit 1000k 有疑問?點這裡 對於乙個n n的稀疏矩陣m 1 n 1000 採用三元組順序表儲存表示,查詢從鍵盤輸入的某個非零資料是否在稀疏矩陣中,如果存在則輸出ok,不存在則輸出error。稀疏矩陣示例圖如下 連續輸入多組資料,每組資料的第一行...