




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第二節(jié)矩陣的壓縮存儲
一、特殊矩陣
特殊矩陣:是相同值的元素或者零元素在矩陣中的分布有一定規(guī)律
的矩陣。
1、對稱矩陣
若n階方陣A中的元素滿足下述性質(zhì):
aij=aji(0<i,j<n-l)
則稱A為n階的對稱矩陣。
對于一個n階對稱矩陣,可只存儲其下三角矩陣:
/^aoo
aioan
320a21電2
?????????
^3n-103^-11an-ln-^
將元素壓縮存儲至I」1+2+3+…+n=n(n+1)/2個元素的存儲空間
中,假設(shè)以一維數(shù)組sa[n(n+1)/2]作為n階對稱矩陣A的存儲結(jié)
構(gòu),以行序為主序存儲其下三角(包括對角線)中的元素,數(shù)組M[k]
和a.j的對應(yīng)關(guān)系:
"1+2+3+…-iqT(i+1)/2+j當(dāng)iZj
、j(j+1),2*當(dāng)i<j
真題選解
(例題?單選題)設(shè)有一個10階的對稱矩陣A,采用行優(yōu)先壓縮存
儲方式,譏1為第一個元素,其存儲地址為1,每個元素占一個字節(jié)空
間,則385的地址為()
A.13
B.18
C.33
D.40
隱藏答案
【答案】C
【解析】an為第一個元素,a85是第(1+2+3+4+5+6+7)
+5=33個元素,則m5的地址為1+(33-1)*1=33。注意不要死記
硬背公式。
(例題算法設(shè)計題)已知A和B是兩個nxn階的對稱矩陣,因
為是對稱矩陣,所以僅需要輸入下三角元素值存入一維數(shù)組。試寫一
算法,求對稱矩陣A和B的乘積。
隱藏答案
【分析】對稱矩陣的第i行和第j列的元素數(shù)據(jù)在一維數(shù)組中的位
置:
L=i(i+l)/2+j當(dāng)i習(xí)時A.,Bij處在下
三角中);
L=j(j+l)/2+i當(dāng)i<j時向,Bij處在
上三角中);
L代表A.或By在對稱矩陣存儲的一維中的位置,而且0W
L<n(n+l)/2
【算法描述】
voidmatrlxmult(inta[],intb[],intc[][20],intn)
{//n為A、B矩陣下三角元素個數(shù),a,b分別為一維數(shù)組,
〃存放矩陣A和B的下三角元素值,c存放A和B的乘積
for(i=0;i<20;i++)
for(j=O;j<20;j++)
{s=0;
for(k=0;k<n;k++)
{if(i>=k)〃表示元素為下三角的元
素,計算在a數(shù)組中的下標(biāo)
Ll=i*(i+l)/2+k;
else〃表示元素為上三角的元
素,計算下標(biāo)
Ll=k*(k+l)/2+i;
if(k>=j)〃表示元素為下三角的元
素,計算在b數(shù)組中的下標(biāo)
L2=k*(k+l)/2+j;
else
L2=j*(j+l)/2+k;
s=s+a[Ll]*b[L2];〃計算矩陣成績
)
c[i][j]=s;
)
)
2.三角矩陣
/aoocc…cA酒0a10^20…an-io
aanccan
10ca21…an-ll
a20a21堰2???ccc322''"a2n-l
????????,??????■■■???
cc
L…。
芝10%-12an-ln-lJc%-lnTJ
下三角矩陣上三角矩陣
下三角矩陣的主對角線上方均為常數(shù)C或零;上三角矩陣是指矩陣
的下三角(不包括對角線)中的元素均為常數(shù)c或是零的n階方陣。一
般情況下,三角矩陣的常數(shù)c均為零。
三角矩陣可壓縮存儲到數(shù)組M[n(n+1)/2+1]中。
上三角矩陣中,主對角線上的第i行有n-i+1個元素,以行序為主
序存放,M[k]和ag的對應(yīng)關(guān)系是:
一好(11-1)411?2)+…(2n?i+2)2-+j-i當(dāng)iWj
k=<
?n(n+1)/2當(dāng)i習(xí)
下三角矩陣中,以行序為主序存放,與對稱矩陣類是,M[k]和aij
的對應(yīng)關(guān)系是:
ri(i^l)/2+j當(dāng)i為
k=y
、n(n^l)/2當(dāng)i<j
真題選解
(例題?填空題)L假設(shè)一個10階的上三角矩陣A按行優(yōu)先順序
壓縮存儲在一維數(shù)組B中,若矩陣中的第一個元素an在B中的存儲
位置k=0,則元素a55在B中的存儲位置k=。
隱藏答案
【答案】34
【解析】元素a55的前面存儲了4行,每行存儲的元素個數(shù)分別
為:10、9、8、7,元素a55存儲在第5行要存儲的第1個元素,所
以a55在B中的存儲位置k=0+[(10+9+8+7)+l-l]=34
二、稀疏矩陣
1、稀疏矩陣的定義
含有大量的零元素且零元素分布沒有規(guī)律矩陣稱為稀疏矩陣。
2、三元組表
(1)三元組表的含義:一個稀疏矩陣可用一個三元組線性表表
示,每個三元組元素對應(yīng)稀疏矩陣中的一個非零元素,包含有該元素
的行號、列號和元素值。每個三元組元素在線性表中是按照行號值的
升序為主序、列號值的升序為輔序(即行號值相同再按列號值順序)
排列的。
【例】畫出下列稀疏矩陣對應(yīng)的三元組表
<0010\
0500
0000
-7J
00
【解析】根據(jù)前面三元組的含義很容易畫出該矩陣的三元組表。
【答案】
j
021
115
30-4
33-7
(2)三元組表的類型定義
#defineMaxsize1000〃假設(shè)非零元素個數(shù)的最大為1000個
typedefstruct
{intij;〃非零元素的行號、列號(下標(biāo))
DataTypev;〃非零元素值
}TriTupleNode;
typedefstruct
{TriTupleNodedata[Maxsize];/府儲三元組的數(shù)組
intm,n,t;〃矩陣的行數(shù)、列數(shù)和非零元素個數(shù)
}TSMatrix;〃稀疏矩陣類型
【例】試寫一個算法,建立順序存儲稀疏矩陣的三元組表。
【分析】假設(shè)A為一個稀疏矩陣,其數(shù)據(jù)存儲在二維數(shù)組a中,b
為一個存放對應(yīng)于A矩陣生成的三元組表。在這個算法中,要進(jìn)行二
重循環(huán)來判斷每個矩陣元素是否為零,若不為零,則將其行、列下標(biāo)
及其值存入b中。
【算法描述】
voidCreateTriTable(TSMatrix*b,inta[][5],intm,intn)
{//建立稀疏矩陣的三元組表
inti,j,k=0;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
if(a[i][j]!=O)〃找出非零元素
{b->data[k].i=i;〃記錄非零元素行下標(biāo)
b->data[k].j=j;〃記錄非零元素列下標(biāo)
b->data[k].v=a[i][j];〃保存非零值
k++;〃統(tǒng)計非零元素個數(shù)
)
b->m=m;b->n=n;〃記錄矩陣行列數(shù)
b->t=k:〃保存非零個數(shù)
)
【例】試寫一個算法,實現(xiàn)以三元組表結(jié)構(gòu)存儲的稀疏矩陣的轉(zhuǎn)置
運XA算~A-。
【分析】對于一個mxn的矩陣M,它的轉(zhuǎn)置矩陣T是一個nxm
的矩陣,而且M尸方(0<i<m,0<j<n),即M的行是T的列,M的
列是T的行。
[0010\
/03050
、300
0
00-200
T=0-208
10006
oj000
g080
<006V
稀疏矩陣M和它的轉(zhuǎn)置矩陣T
矩陣M對應(yīng)的三元組表矩陣M的轉(zhuǎn)置矩陣對應(yīng)的三元組表
a.dqtab.data
(1)一般的轉(zhuǎn)置算法
【算法思想】對M中的每一列col(Owcolwa.n-l)從頭至尾依次掃
描三元組表,找出所有列號等col的那些三元組,并將它們的行號和
列號互換后再依次存入b->data中,這樣就可得到T的按行優(yōu)先的三
兀組表。
【算法描述】
voidTransMatrix(TSMatrixa,TSMatrix*b)
{//a和*b是矩陣M、T的三元組表表示,求稀疏矩陣M的轉(zhuǎn)置T
intp,q,col;
b->m=a.n;b->n=a.m;//M和T彳亍歹U數(shù)互
換
b->t=a.t;〃賦值非零元素個數(shù)
if(b->t<=0)
printf("M中無非零元素!。;
else
{q=0;
for(col=0;col<a.n;++col)
for(p=0;p<a.t;++p)〃掃描M的三元組
表
if(a.data[p].j==col)〃找與col相等的三
元組
{b->data[q].i=a.data[p].j;
b->data[q].j=a.data[p].i;
b->data[q].v=a.data[p].v;
++q;
}
)
)
【算法分析】該算法的時間復(fù)雜度為O(nxt),即與稀疏矩陣M的
列數(shù)和非零元素個數(shù)的乘積成正比。一般的矩陣轉(zhuǎn)置算法的時間復(fù)雜
度為該算法僅適用于非零元素個數(shù)遠(yuǎn)遠(yuǎn)小于矩陣元素個
0(mxn)ot
數(shù)mxn的情況。
(2)快速轉(zhuǎn)置算法
【算法思想】創(chuàng)建兩個數(shù)組和。]存放矩陣第
numrownextonumj
列上非零元素個數(shù),rownext[i]代表轉(zhuǎn)置矩陣第i行的下一個非零元素
在b中的位置。
【算法描述】
voidFaStTran(TSMatfixa,TSMatrix*b)
{intcol,p,t,q;
int*num,*rownext;
num=(int*)calloc(a.n+l,4);//分配n+1個
長度為4的連續(xù)空間
rownext=(int*)calloc(a.m+l,4);//分配m+1
個長度為4的連續(xù)空間
b->m=a.n;b->n=a.m;b->t=a.t;
if(b->t)
{for(col=0;col<a.n;++col)
num[col]=0;〃初始化
for(t=0;t<a.t;++t)
++num[a.data[t].j];〃計算每列非零元
素數(shù)
rownext[0]=0;
for(col=l;col<a.n;++col)〃給出b中每
一行的起始點
rownext[col]=rownext[col-l]+num[col-l];
for(p=0;p<a.t;++p)〃執(zhí)行轉(zhuǎn)置操(乍
{col=a.data[p].j;
q=rownext[col];
b->data[q].i=a.data[p].j;
b->data[q].j=a.data[p].i;
b->data[q].v=a.data[p].v;
++rownext[col];〃下一次再有
該行元素,起始點就比上一個加了1
)
)
)
【算法分析】算法的時間復(fù)雜度為0(t)
3、帶行表的三元組表
帶行表的三元組表:又稱為行邏輯鏈接的順序表。在按行優(yōu)先存儲
的三元組表中,增
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度城市軌道交通建設(shè)與運營合同
- 山東水資源管理市場前景及投資研究報告
- 2025年超高壓電纜連接件項目可行性分析報告
- 2025年度裝修工程風(fēng)險管理與保險合同
- 中國杭州市旅游行業(yè)市場發(fā)展現(xiàn)狀及投資規(guī)劃建議報告
- 2025年度綠色建筑節(jié)能改造裝修工程承包合同
- 2025年度食堂食品安全責(zé)任承包管理合同4篇
- 放射性物品運輸核與輻射安全分析報告書格式和內(nèi)容
- 2025年度智慧城市建設(shè)員工聘用合同書
- 2025年度屋頂綠化草坪設(shè)計、施工與維護(hù)一體化合同
- 產(chǎn)后抑郁癥講課課件
- 人工智能背景下高職五育并舉的人才培養(yǎng)研究
- 汽車行業(yè)維修記錄管理制度
- IQC檢驗作業(yè)指導(dǎo)書
- 城市自來水廠課程設(shè)計
- 重慶市2024年小升初語文模擬考試試卷(含答案)
- 2024智慧城市數(shù)據(jù)采集標(biāo)準(zhǔn)規(guī)范
- 【人教版】《勞動教育》七上 勞動項目一 疏通廚房下水管道 課件
- 2024特斯拉的自動駕駛系統(tǒng)FSD發(fā)展歷程、技術(shù)原理及未來展望分析報告
- 2024-2030年中國銀行人工智能行業(yè)市場深度調(diào)研及發(fā)展趨勢與投資前景研究報告
- 五屆全國智能制造應(yīng)用技術(shù)技能大賽數(shù)字孿生應(yīng)用技術(shù)員(智能制造控制技術(shù)方向)賽項實操樣題
評論
0/150
提交評論