當前位置:首頁 » 存儲配置 » 稀疏矩陣三元組存儲

稀疏矩陣三元組存儲

發布時間: 2022-06-29 11:39:36

1. 稀疏矩陣三元組存儲結構的定義及其有關演算法的實現

/*我寫的一個例子,基本上將稀疏矩陣三元組存儲結構的定義和其有關的演算法都實現了,你可以借一本關於數據結構c語言實現的書來看一下*/
#include<stdio.h>
#define MAXSIZE 1000//非零元素的個數最多為1000
typedef struct {
int row;
int col;
int e;
}Triple;
typedef struct{
Triple data[MAXSIZE];//非零元素的三元組表
int m;//矩陣的行數
int n;//矩陣的列數
int non_zero_num;//非零元數的個數
}XSMatrix;
XSMatrix XSM_Info_Input(XSMatrix s){
int i;
printf("輸入矩陣的行數:");
scanf("%d",&s.m);
printf("輸入矩陣的列數:");
scanf("%d",&s.n);
printf("輸入矩陣的非零元素的個數:");
scanf("%d",&s.non_zero_num);
for(i=0;i<s.non_zero_num;i++){
printf("輸入第%d個非零元數的信息:\n",i+1);
printf("行下標:");
scanf("%d",&s.data[i].row);
printf("列下標:");
scanf("%d",&s.data[i].col);
printf("元素的值");
scanf("%d",&s.data[i].e);
}
return s;
}
void XSM_Info_Output(XSMatrix s){
int i;
printf("\n稀疏矩陣行數和列數:%d\t%d\n",s.m,s.n);
printf("稀疏矩陣三元組表如下:\n");
printf("行下標\t列下標\t值\n");
for(i=0;i<s.non_zero_num;i++){
printf("%d\t%d\t%d\n",s.data[i].row,s.data[i].col,s.data[i].e);
}
}
//列序遞增轉置法
XSMatrix TransXSM(XSMatrix s){
XSMatrix d;
int i,j,k=0;
d.m=s.n;
d.n=s.m;
d.non_zero_num=s.non_zero_num;
for(i=0;i<s.n;i++){
for(j=0;j<s.non_zero_num;j++){
if(s.data[j].col==i)
{
d.data[k].row=s.data[j].col;
d.data[k].col=s.data[j].row;
d.data[k].e=s.data[j].e;
k++;
}
}
}
return d;
}
main(){
XSMatrix source,dest;
source=XSM_Info_Input(source);
XSM_Info_Output(source);
dest=TransXSM(source);
XSM_Info_Output(dest);
}

2. 利用三元組存儲任意稀疏矩陣時,在什麼條件下能節省存儲空間 簡答題

若一個稀疏矩陣有T個非零元素,則需要T+1行的三元組來表示稀疏矩陣.一般對於M*N的矩陣來說,只要滿足3(T+1)<=M*N 這個條件,使用三元組存儲可以節省空間.

3. 數據結構中怎樣給出一個 6*6 的稀疏矩陣,並將其轉化為三元組存儲

1.給出6*6的稀疏矩陣,可以初始化輸入,或者用二個for循環輸入
2.至於轉化為三元組存儲,可以定義三元組結構體,再定義三元組順序表
3.用for循環和if語句將稀疏矩陣中的數據賦予給三元組表
思路給你,自己寫比較能提升編程能力
希望我的回答能夠幫助到您,謝謝。

4. 三元組表與稀疏矩陣,怎麼轉換要求法。最好文字表述

l->e=(list)malloc((MAXSIZE+1)*sizeof(ElemType));// 這句在VC不能通過編譯,因為e是elemtype類型,分配的空間是list類型,不匹配。

三元組,第1列是行號,第2列是列號,第3列是非零元素的值。假設以順序存儲結構來表示三元組表(triple table),則得到稀疏矩陣的一種壓縮存儲方式,即三元組順序表,簡稱三元組表。

(4)稀疏矩陣三元組存儲擴展閱讀:

對於在實際問題中出現的大型的稀疏矩陣,若用常規分配方法在計算機中儲存,將會產生大量的內存浪費,而且在訪問和操作的時候也會造成大量時間上的浪費,為了解決這一問題,從而產生了多種解決方案。

由於其自身的稀疏特性,通過壓縮可以大大節省稀疏矩陣的內存代價。具體操作是:將非零元素所在的行、列以及它的值構成一個三元組(i,j,v),然後再按某種規律存儲這些三元組,這種方法可以節約存儲空間。

5. 採用基於稀疏矩陣的三元組壓縮存儲方法,實現m×n矩陣的快速轉置

#include<iostream>
using
namespace
std;
class
matrix
{
public:
int
data[100][100];
int
m,n;
};
typedef
int
spmatrix[100][3];
void
Init(matrix&
mx);//稀疏矩陣初始化
void
SpmDisplay(spmatrix
spm);//顯示三元組表示的矩陣
void
Compressmatrix(matrix
A,spmatrix
B);//將稀疏矩陣轉換為三元組矩陣
void
Transpmatrix(spmatrix
B,spmatrix&
C);//將三元組矩陣轉置
int
main()
{
matrix
mx;
spmatrix
spm1,spm2;
//矩陣初始化
Init(mx);
//矩陣轉為三元組
Compressmatrix(mx,spm1);
//顯示三元組矩陣
SpmDisplay(spm1);
//將三元組轉置存放到spm2中
Transpmatrix(spm1,spm2);
//顯示轉置後的三元組
SpmDisplay(spm2);
return
0;
}

6. 三元組存儲稀疏矩陣的好處是神馬呢急求!!

三元組僅存儲矩陣中不為零的元素,節省了存儲空間。
缺點是增加運算的復雜性,尤其是隨機存取矩陣元素時。

7. 三元組表示稀疏矩陣是什麼

三元組表示稀疏矩陣如下:

從方法上講,所謂的三元組法表示稀疏矩陣是:將非零元素所在的行、列以及它的值構成一個三元組(i、j、v),然後再按某種規律存儲這些三元組,這種方法可以節約存儲空間。

對於稀疏矩陣,採用壓縮存儲方法時,只存儲非0元素。必須存儲非0元素的行下標值、列下標值、元素值。因此,一個三元組唯一確定稀疏矩陣的一個非零元素。

稀疏矩陣和三元組的特點:

稀疏矩陣的概念是:一個m行n列的矩陣,若它的非零元個數特別少,即可稱它為稀疏矩陣。只存儲稀疏矩陣的非零元。除了存儲非零元的值a以外,還必須記下它的行下標i和列下標j。反之,一個三元組唯一確定矩陣的一個非零元。因此,一個稀疏矩陣可由一個三元組數組和該矩陣的行列數來確定。

8. 稀疏矩陣一般的壓縮存儲方法有兩種

分別是三元組和十字鏈表。

三元組是指形如((x,y),z)的集合(這就是說,三元組是這樣的偶,其第一個射影亦是一個偶),常簡記為(x,y,z)。

三元組是計算機專業的一門公共基礎課程——數據結構里的概念。主要是用來存儲稀疏矩陣的一種壓縮方式,也叫三元組表。假設以順序存儲結構來表示三元組表(triple table),則得到稀疏矩陣的一種壓縮存儲方式,即三元組順序表,簡稱三元組表。

十字鏈表(Orthogonal List)是有向圖的另一種鏈式存儲結構。該結構可以看成是將有向圖的鄰接表和逆鄰接表結合起來得到的。用十字鏈表來存儲有向圖,可以達到高效的存取效果。同時,代碼的可讀性也會得到提升。

拓展資料:

十字鏈表(Orthogonal List)是有向圖的另一種鏈式存儲結構。可以看成是將有向圖的鄰接表和逆鄰接表結合起來得到的一種鏈表。在十字鏈表中,對應於有向圖中每一條弧都有一個結點,對應於每個定頂點也有一個結點。

十字鏈表之於有向圖,類似於鄰接表之於無向圖。

也可以理解為 將行的單鏈表和列的單鏈表結合起來存儲稀疏矩陣稱為十字鏈表, 每個節點表示一個非零元素。

三元組解釋:

1、所謂「三元組」是指圖形的幾何元素構成、圖線間的拓撲關系和尺寸約束。如果一組圖形的前二元相同而只是尺寸大小不同,則這組圖形構成一族形狀相同的系列化圖形。

2、把組成一個元素的三個數稱為三元組。一個三元組包含以下三部分的內容SDO_STARTING_OFFSET表明每個幾何元素的第一個坐標在SDO_ORDINATES數組中的存儲位置。

3、…Mt:N2)的表示稱為三元組...…Mt稱為標號,N1、N2為結點R為關系。當n≠0時,稱Li為對結點N1的修飾。t≠0時,稱Mj為對結點N2的修飾。

參考資料:網路:十字鏈表

網路:三元組

9. 稀疏矩陣是怎樣存儲的

/*
稀疏矩陣的三元組順序表存儲表示
*/
# define MAX_SIZE 100//非零元個數的最大值
struct Triple
{
int i,j;//行下標,列下標
ElemType e;//非零元素值
};
struct TSMatrix
{
Triple data[MAX_SIZE+1];//非零元三元組表,data[0]未用
int mu,nu,tu;//矩陣的行數、列數和非零元個數
};

10. 三元組表示稀疏矩陣是什麼

三元組表示稀疏矩陣是行列形式。為了方便某些矩陣運算,在按行優先存儲的三元組表中,加入一個行表來記錄稀疏矩陣中每行的非零元素在三元組表中的起始位置。

在矩陣中,若數值為0的元素數目遠遠多於非0元素的數目,並且非0元素分布沒有規律時,則稱該矩陣為稀疏矩陣;與之相反,若非0元素數目佔大多數時,則稱該矩陣為稠密矩陣。定義非零元素的總數比上矩陣所有元素的總數為矩陣的稠密度。

優點

稀疏矩陣的計算速度更快,因為 MATLAB 只對非零元素進行操作,這是稀疏矩陣的一個突出的優點。

假設矩陣 A,B 中的矩陣一樣,計算 2*A 需要一百萬次的浮點運算,而計算 2*B 只需要 2000 次浮點運算。

因為 MATLAB 不能自動創建稀疏矩陣,所以要用特殊的命令來得到稀疏矩陣。算術和邏輯運算都適用於稀疏矩陣。

對於一個用二維數組存儲的稀疏矩陣 Amn ,如果假設存儲每個數組元素需要 L 個位元組,那麼存儲整個矩陣需要 m*n*L 個位元組。但是,這些存儲空間的大部分存放的是 0 元素,從而造成大量的空間浪費。為了節省存儲空間,可以只存儲其中的非 0 元素。

熱點內容
sql2008外網訪問 發布:2024-04-24 10:34:20 瀏覽:575
如何在伺服器中添加字 發布:2024-04-24 10:21:43 瀏覽:361
代寫Python 發布:2024-04-24 10:19:08 瀏覽:768
安卓手機如何破九宮鎖 發布:2024-04-24 10:05:47 瀏覽:676
攝像頭要什麼樣的配置好 發布:2024-04-24 09:30:24 瀏覽:365
存儲過程定義多個變數 發布:2024-04-24 09:04:13 瀏覽:762
為什麼安卓手機不值錢 發布:2024-04-24 09:02:40 瀏覽:100
拱度計演算法 發布:2024-04-24 08:53:09 瀏覽:290
windowsefs加密 發布:2024-04-24 08:51:30 瀏覽:879
英雄聯盟和飢荒哪個配置要求更高 發布:2024-04-24 07:55:09 瀏覽:604