11 votes

Consider a 2 dimensional array A[40...95,40...95] in lower triangular matrix representation. The size of each element of array is 1 Byte.If array is implemented in memory as Row major,with base address as 1000,the address of A[66][50] is .....

Ans. 1361

Ans. 1361

18 votes

Best answer

In general for RMO we calculate like :

Let A[L_{R}.....U_{R}][Lc.....Uc] be a 2D array

Address of A[i][j]= Base + Size of each element { (no. of rows fully covered before reaching row i x no. of columns in each row) + no. of elements covered in the current row i}

no. of rows fully covered = (i-L_{R})

no. of columns in each row= (U_{c}-L_{c}+1)

But here the case is a bit different. The elements are arranged in lower triangular matrix form like this:

The rows are not fully covered.

The 1st row has 1 element.

The 2nd row has 2 elements. The 3rd has 3 elements and so on.

So k^{th} row will have k elements.

No. of elements covered upto k rows is 1+2+3....k = k(k+1)/2.

We need to find address of A[i][j]. To reach this row no. i we have to cover previous (i-L_{R}) rows.

So, no. of elements covered in (i-L_{R}) rows is ((i-L_{R})* (i-L_{R}+1))/2 rows

Now we are at row no. i.

No. of elements covered in this row no. i is (j-L_{c}) elements.

Address of A[i][j]= Base + size( ((i-L_{R})* (i-L_{R}+1))/2 + (j-L_{c}))

Address of A[66][50] = 1000 + 1 ( (66-40)*(66-40+1)/2 + (50-40) ) = 1000 + (26*27/2 + 10 ) = 1000 + (351+10) =1361

------------------------------------------------------------------------------------------------------

We need to find address of A[66][50]. To reach this row no. 66 we have to cover (66-40)= 26 rows.

So, no. of elements covered in 26 rows = 26*(26+1)/2 = 351

Now we are at row no. 66.

No. of elements covered in this row is (50-40) = 10.

Address of A[66][50] = 1000 + (351+10) =1361

1 vote

*A[40 ..... 95, 40 ..... 95] *

*A[66] [50]*

**Total elements in rows = 95-40+1 = 56**

**total no of elements in columns = 95-40+1 = 56**

**base address = 1000 ** **element size = 1**

**lower triangular matrix**

**hence address of A[66][50]**

**1000 + ((66-40) (66-40+1)/2 + (50-40)) * 1**

**= 1000 + 361 = 1361**

formula = **BA + ((i-lb1) (i-lb1 +1) /2** + **(j-lb2)) * c (c is element size)**

**lb1 = lower bound of row lb2 = lower bound of column**

1 vote

$a[40....95][40....95]$

$BA=1000$

$Size\ of\ element=1\ B$

$Loc[66][50]$

$\\ =1000+\left \{\underbrace {66-40=26}+(50-40) \right \}\times 1B$

$Natural\ \#\ sum\\ of\ 26\ rows$

$=1000+\left \{ \dfrac{26\times 27}{2}\ +\ 10 \right \}\times 1B$

$=1000+\left \{ 351+10 \right \}\times 1B$

$=1361B$

$BA=1000$

$Size\ of\ element=1\ B$

$Loc[66][50]$

$\\ =1000+\left \{\underbrace {66-40=26}+(50-40) \right \}\times 1B$

$Natural\ \#\ sum\\ of\ 26\ rows$

$=1000+\left \{ \dfrac{26\times 27}{2}\ +\ 10 \right \}\times 1B$

$=1000+\left \{ 351+10 \right \}\times 1B$

$=1361B$

1 vote

$a[40...95,40...95]=a[56][56]$

$loc[66][50]:RMO$

$40^{th}\ row=1$

$41^{st}\ row=2$

$42^{nd}\ row=3$

.

.

.

$66^{th}\ row=26$

$Sum=1+2+3....+26=351$

Now you are standing on $66^{th}$ row and it's first element will start from $40^{th}$ column but you need to go to $50^{th}$ column, hence add $11(40,41,42....50)$

$351+11=362$

$362+1000=1362$

But index starts from $0,$ so subtract $1$

$1362-1=1361$

$loc[66][50]:RMO$

$40^{th}\ row=1$

$41^{st}\ row=2$

$42^{nd}\ row=3$

.

.

.

$66^{th}\ row=26$

$Sum=1+2+3....+26=351$

Now you are standing on $66^{th}$ row and it's first element will start from $40^{th}$ column but you need to go to $50^{th}$ column, hence add $11(40,41,42....50)$

$351+11=362$

$362+1000=1362$

But index starts from $0,$ so subtract $1$

$1362-1=1361$

0 votes

I think answer should be 2466 because given array is 2 dimensional then doesn't matter it is lower triangular,upper triangular or diagonal matrix as all 0's also require 1 B of memory,hence the address of A[66][50] will be:

1000+[(50-40)+(95-40+1)*(66-40)] = 2466

1000+[(50-40)+(95-40+1)*(66-40)] = 2466

0 votes

$a[40...95,40...95]$

$loc[66][50]:RMO$

Make changes to approach in a different way.

$a[0...55,0...55]$

$loc[26][10]:RMO$

$0^{th}\ row=1$

$1^{st}\ row=2$

$2^{nd}\ row=3$

.

.

.

$25^{th}\ row=26$

$Sum=1+2+3....+26=351$

Now you are standing on $26^{th}$ row and it's first element will start from $0^{th}$ column but you need to go to $10^{th}$ column, hence add $10(0,1,2....9)$

$351+10=361$

$361+1000=1361$

$loc[66][50]:RMO$

Make changes to approach in a different way.

$a[0...55,0...55]$

$loc[26][10]:RMO$

$0^{th}\ row=1$

$1^{st}\ row=2$

$2^{nd}\ row=3$

.

.

.

$25^{th}\ row=26$

$Sum=1+2+3....+26=351$

Now you are standing on $26^{th}$ row and it's first element will start from $0^{th}$ column but you need to go to $10^{th}$ column, hence add $10(0,1,2....9)$

$351+10=361$

$361+1000=1361$