Professional Documents
Culture Documents
1
int a[5]={0,1,2,3,4};
Item Retrieval (A, i) 取出
b=a[0];
Array Store (A, i, x) 存入 a[0]=1;
電腦的記憶體可視為一維陣列,依序排列
Variable Memory Address
A[0] Base addr. = α
A[1] α+ sizeof(int)
A[2] α+ 2*sizeof(int)
2
練習題: 若 a[0-2,0-6],a[0,0]=α,int 長度為 4 Bytes,則 a[1][2]所在的記憶體位
置為何?
Row-major a[1][2]=α+1(列)*7*4+2(行)*4=α+36
Column-major a[1][2]=α+1(行)*3*4+2*4=α+28
技巧:
1. 月曆是以 row-major(列為主)方式安排水平掃描
2. 列長 = 7 (每周 7 天)
3. 不同列中,相同位置元素,記憶體位址會相差 n × 7
3
(2,0) (2,1) (2,2)
[94 公務員三級特考] 假設陣列資料以行為主(column major)儲存於記憶體中,
且每份資料佔 1 個記憶體單位,若陣列 A 的第一個元素 A[0,0]位址是
2152,A[4,5]是 2196,則 A[5,4]的位址為何?
(A)2159 (B)2169 (C)2173 (D)2189
(0,0)2152 (0,1) (0,2) (0,3) (0,4) (0,5) …
(1,0)
(2,0)
(3,0)
(4,0)2156 (4,5)2196
(5,0) (5,4)=?
…
1. Column major (行為主)垂直掃描
2. Element size = 1, column length=? (2196-2156)/5=8
A[1,1]
644
A[2,2]
16 32
660
A[3,3]
676
A(14,14)=676+(14-3)*16=852
4
(1, 1) (1, 2) (1, 3) (1, 4)
(2, 1) (2, 2) (2, 3) (2, 4)
(3, 1) (3, 2) (3, 3) (3, 4)
1160-1110=6→表示一行有 6 個元素
練習題: A(5,3)位址為 5314,A(8,5)位址為 5422,每個元素長度為
4bytes,求 A(2,7)位址?
Ans:
Row-major(Error)
5314
A(5,3) A(5,4) …..
A(6,3) A(6,4) …..
100/3??
A(7,3) A(7,4) …..
A(8,3) A(8,4) A(8,5) …
5414 5422
Column-major(OK)
+12
5314 5326
A(5,3) A(6,3) A(7,3) A(8,3)
96/2=48
A(5,4) A(6,4) A(7,4) A(8,4) N=48/4=12
A(5,5) A(6,5) A(7,5) A(8,5)
5422
N=12
A(2,7)=5314+[(7-3)*12*4+(2-5)*4]=5494
5
三、 矩陣 Matrix
三角矩陣是屬於特殊的二維陣列矩陣,同樣也用壓縮的儲存方式,能夠更好的
節約儲存空間,二維陣列的三角矩陣分為上三角矩陣(upper triangular
matrix)和下三角矩陣(lower triangular matrix)。
(1,1)
非零區
(10,10)
6
例:有一個 A100×100 的下三角矩陣用一維陣列 B 來儲存,回答下列問題:
(A) 元素個數? (指的是非 0 的元素個數)
(B) A[65, 60]的資料以 Row-major 恰存入一維陣列 B[k] (B 的起始索引值為 1,即
A[1,1]B[1]),則 k = ?
(C) A[70, 50]以 Column-major 存入 B[k]中,則 k=? Ans:5050, 2140, 3745
7
§ 三角矩陣之一般化(利用梯形面積公式)
(1,1)
(1,1)
1+2+…+64=2080
60
(65,1) (65,60)
(i,j) )
Non-zero (n,n)
(n,n)
(1) A(n,n)=1+2+3+…..+n=n(n+1)/2
(2) A(i,j)=[1+(i-1)]*(i-1)/2+j=i(i-1)/2+j OR
A(i,j)=(i+1)*i/2-j
(1,1)
例1
(i,j)
Non-zero
(n,n)
A(i,j),1<=i<=n,,1<=j<=n
假設用一維陣列 B 來儲存非零元素,B 的指標由 1 開始計算,A 的非零元素以
列為主,由左到右,由上到下的次序存於 B
(1) B 有多少元素?
Ans:n(n+1)/2 個
(2) 非零元素 A(i,j)儲存於 B 的指標位置為何?
Ans:i*(i-1)/2+(i+j)-n OR i*(i+1)/2-(n-j)
8
[95 公務員警察特考]一個一般化帶狀矩陣(generalized band matrix) An,a,b 為一
個 nxn 矩陣 A(1-100,1-100),其中帶狀之項目為非零之數字如下圖(A)所示。圖
(B)為 A4,3,2 之範例,假設此帶狀陣列內元素依序存在一維陣列 B 中,而儲存方
式是由右下角開始存放。如圖(B)的存放方式如下
B(1) B(2) B(3) B(4) B(5) B(6) B(7) B(8) B(9) B(10) B(11) B(12)
7 6 5 4 2 4 2 3 9 1 5 8
n a
b
0 0 1 4
0 5 2 5
非零區 8 3 4 7
9 2 6 0
a
圖(B)
b
圖(A)
[91 台北大學資管所]同上題
將對應關係修改成
B(1) B(2) B(3) B(4) B(5) B(6) B(7) B(8) B(9) B(10) B(11) B(12)
1 5 8 4 2 3 9 5 4 2 7 6
(一)A100,20,30 中,A(70,34)在陣列 B 中排在甚麼位置? 2074
(二)假設在 A100,20,30 中 A(i, j)排在陣列 B 中 B(300),請問 i 和 j 值各為多少?
A(54,31)
9
§ The Sparse Matrix 稀疏矩陣
稀疏矩陣(sparse matrix),在數值分析中,是其元素大部分為零的矩陣。在科
學與工程領域中求解線性模型時經常出現大型的稀疏矩陣。
row0 15 0 0 22 0 -15
0 11 3 0 0 0
row1 0 0 0 -6 0 0
row2 0 0 0 0 0 0
91 0 0 0 0 0
row3 0 0 28 0 0 0
row4
row5
.m=n→square 方陣
.using the triple < row, column, value > to characterize the matrix
row column value
b[0] ← 0 0 15
b[1] ← 0 3 22
b[2] ← 0 5 -15
B b[3] ← 1 1 11
b[4] ← 1 2 3
b[5] ← 2 3 -6
b[6] ← 4 0 91
b[7] ← 5 2 28
10
例1
Give two polynomials as follows:
K(x)=X5+8X3+X2+2
M(x)=X100+3X10+1
Write an array representation of two polynomials.
Ans:
K(x)因為非零項次較少,故採用下列格式(n 代表非 0 係數最高項次)
0 1 2 n+1
n
Xn Xn-1
∴ K(x)= 0 1 2 3 4 5 6
5 1 0 8 1 0 2
次方數
M(x) 因為零項次較多,故採用下列格式
假設有 m 個非 0 項次
0 1 2 2m-1 2m
非 m
零 係數 指數 係數 指數
係
數
∴ M(x)= 0 1 2 3 4 5 6
3 1 100 3 10 1 0
總項數 係數 指數 係數 指數
目的→節省記憶體空間
鋼琴家大衛托利:機會是留給準備好的人
https://www.youtube.com/watch?time_continue=110&v=IikaDKvC1as
「機會是留給準備好的人」這句話對美國鋼琴家大衛托利(David Tolley)是對的,他曾為百
老匯寫曲,並為四任美國總統演出。而最讓人津津樂道的是他的成名過程,除了幸運,他在機
會面前毫無畏懼的自信。
11
當時大衛只穿著簡單的 T 恤、牛仔褲和拖鞋,還被主持人調侃,但這都不影響大衛的心情。在
他坐上鋼琴椅並開始演奏歌舞劇《貓》的主題曲《Memory》後,他精湛的琴藝以及幽默感讓
觀眾驚訝鼓掌。 (refer to 大紀元報:美國著名鋼琴家的成名之路)。當機會來臨時,你會舉手抓
住、還是等著別人推你一把,抑或是被強迫拱上台?
12