Re: [理工] 資料結構Array位址計算

作者: john35452 (小杰)   2014-03-08 22:18:20
※ 引述《APE36 (PT鄉民)》之銘言:
: 1.
: A(3,3)=121 , A(6,4)=159 請問A(4,5)之位址為多少??
: Ans:192
: 2.
: A(1,1)=2 , A(2,3)=18 , A(3,2)=28 請問A(4,5)之位址為多少??
: ANS: 46
: 3.
: 陣列A(1:6,1:4,1:2) , a=200 , d=1 , 請問A(4,2,2)之位址為多少?
: 有人能幫忙解詳細步驟嗎??感謝!! 有看沒有懂~.~
第三題小弟較不確定,如果有誤請見諒
看到題目如果是二維的陣列
則可以先試著先從座標位置的大小關係來判斷row or column major
若無法直接判斷則需要直接去計算、嘗試
1.
此題本身沒給陣列的行數和列數
而元素大小的部分,我不確定是忘了給還是怎樣
但就此題答案看,元素大小為1...
由於此題從大小關係無法判斷何種major
所以直接下手計算
設陣列為m*n
consider column-major:A(6,4) = A(3,3) + [(4-3)*m+(6-3)] 解出m=35
consider row-major:A(6,4) = A(3,3) + [(6-3)*n+(4-3)] 解出n=37/3 (不合)
所以可知此為column-major,且m為35
則A(4,5) = A(3,3) + [(5-3)*35+(4-3)] = 121 + (2*35+1) = 121 + 71 = 192
2.
此題一樣陣列行數、列數及元素大小皆沒給
但因為A(3,2)>A(2,3),所以為row-major
設陣列為m*n,且每個元素大小為d
所以A(2,3) = A(1,1) + [ (2-1)*n + (3-1) ]*d
A(3,2) = A(2,3) + [ (3-2)*n + (2-3) ]*d
=> 18 = 2 + (n+2)*d
28 = 18 + (n-1)*d
=> d=2,n=6
所以A(4,5)= A(1,1) + ( (4-1)*6 + (5-1) )*2
= 2+(18+4)*2 = 2 + 44 = 46
3.
row-major: A(4,2,2)=A(1,1,1) + [ (4-1)*4*2 + (2-1)*2 + (2-1) ]*1
=200 + [(3*4*2) + (1*2) + 1] = 200 + 27 = 227
col-major: A(4,2,2)=A(1,1,1) + [ (2-1)*4*6 + (2-1)*6 + (4-1) ]*1
=200 + [(1*6*4) + (1*6) + 3] = 200 + 33 = 233

Links booklink

Contact Us: admin [ a t ] ucptt.com