The document discusses different ways of representing arrays in memory for one-dimensional (1D) and two-dimensional (2D) arrays in Java, C, and C++. It explains that a 1D array maps elements to contiguous memory locations based on the starting location. A 2D array can be represented as an "array-of-arrays" by treating each row as a 1D array stored consecutively in memory. It also covers row-major and column-major mappings of 2D arrays to a single 1D array and calculating element positions.
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0 ratings0% found this document useful (0 votes)
79 views24 pages
Lec 10
The document discusses different ways of representing arrays in memory for one-dimensional (1D) and two-dimensional (2D) arrays in Java, C, and C++. It explains that a 1D array maps elements to contiguous memory locations based on the starting location. A 2D array can be represented as an "array-of-arrays" by treating each row as a 1D array stored consecutively in memory. It also covers row-major and column-major mappings of 2D arrays to a single 1D array and calculating element positions.
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 24
Arrays
1D Array Representation In Java, C, and C++
1-dimensional array x = [a, b, c, d] map into contiguous memory locations Memory a b c d start location(x[i]) = start + i
Space Overhead space overhead = 4 bytes for start + 4 bytes for x.length = 8 bytes (excludes space needed for the elements of x) Memory a b c d start 2D Arrays The elements of a 2-dimensional array a declared as: int [][]a = new int[3][4]; may be shown as a table a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3]
Rows Of A 2D Array a[0][0] a[0][1] a[0][2] a[0][3] row 0 a[1][0] a[1][1] a[1][2] a[1][3] row 1 a[2][0] a[2][1] a[2][2] a[2][3] row 2 Columns Of A 2D Array a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3]
column 0 column 1 column 2 column 3 2D Array Representation In Java, C, and C++ view 2D array as a 1D array of rows x = [row0, row1, row 2] row 0 = [a,b, c, d] row 1 = [e, f, g, h] row 2 = [i, j, k, l] and store as 4 1D arrays
2-dimensional array x a, b, c, d e, f, g, h i, j, k, l
2D Array Representation In Java, C, and C++ x.length = 3 x[0].length = x[1].length = x[2].length = 4 a b c d e f g h i j k l x[] Space Overhead space overhead = overhead for 4 1D arrays = 4 * 8 bytes = 32 bytes = (number of rows + 1) x 8 bytes a b c d e f g h i j k l x[] Array Representation In Java, C, and C++ This representation is called the array-of-arrays representation. Requires contiguous memory of size 3, 4, 4, and 4 for the 4 1D arrays. 1 memory block of size number of rows and number of rows blocks of size number of columns a b c d e f g h i j k l x[] Row-Major Mapping Example 3 x 4 array: a b c d e f g h i j k l Convert into 1D array y by collecting elements by rows. Within a row elements are collected from left to right. Rows are collected from top to bottom. We get y[] = {a, b, c, d, e, f, g, h, i, j, k, l} row 0 row 1 row 2 row i Locating Element x[i][j] assume x has r rows and c columns each row has c elements i rows to the left of row i so ic elements to the left of x[i][0] so x[i][j] is mapped to position ic + j of the 1D array row 0 row 1 row 2 row i 0 c 2c 3c ic Space Overhead 4 bytes for start of 1D array + 4 bytes for length of 1D array + 4 bytes for c (number of columns) = 12 bytes
(number of rows = length /c)
row 0 row 1 row 2 row i Disadvantage Need contiguous memory of size rc. Column-Major Mapping a b c d e f g h i j k l Convert into 1D array y by collecting elements by columns. Within a column elements are collected from top to bottom. Columns are collected from left to right. We get y = {a, e, i, b, f, j, c, g, k, d, h, l} Matrix Table of values. Has rows and columns, but numbering begins at 1 rather than 0. a b c d row 1 e f g h row 2 i j k l row 3 Use notation x(i,j) rather than x[i][j]. May use a 2D array to represent a matrix.
Shortcomings Of Using A 2D Array For A Matrix Indexes are off by 1. Java arrays do not support matrix operations such as add, transpose, multiply, and so on. Suppose that x and y are 2D arrays. Cant do x + y, x y, x * y, etc. in Java. Develop a class Matrix for object-oriented support of all matrix operations. See text.
Diagonal Matrix An n x n matrix in which all nonzero terms are on the diagonal.
Diagonal Matrix 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 x(i,j) is on diagonal iff i = j number of diagonal elements in an n x n matrix is n non diagonal elements are zero store diagonal only vs n 2 whole
Lower Triangular Matrix An n x n matrix in which all nonzero terms are either on or below the diagonal.
x(i,j) is part of lower triangle iff i >= j. number of elements in lower triangle is 1 + 2 + + n = n(n+1)/2. store only the lower triangle
1 0 0 0 2 3 0 0 4 5 6 0 7 8 9 10
Array Of Arrays Representation
Use an irregular 2-D array length of rows is not required to be the same. 1 2 3 4 5 6 x[] 7 8 9 l0 Creating And Using An Irregular Array // declare a two-dimensional array variable // and allocate the desired number of rows int [][] irregularArray = new int [numberOfRows][];
// now allocate space for the elements in each row for (int i = 0; i < numberOfRows; i++) irregularArray[i] = new int [size[i]];
// use the array like any regular array irregularArray[2][3] = 5; irregularArray[4][6] = irregularArray[2][3] + 2; irregularArray[1][1] += 3;
Map Lower Triangular Array Into A 1D Array Use row-major order, but omit terms that are not part of the lower triangle.
For the matrix 1 0 0 0 2 3 0 0 4 5 6 0 7 8 9 10 we get 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Index Of Element [i][j] Order is: row 1, row 2, row 3, Row i is preceded by rows 1, 2, , i-1 Size of row i is i. Number of elements that precede row i is 1 + 2 + 3 + + i-1 = i(i-1)/2 So element (i,j) is at position i(i-1)/2 + j -1 of the 1D array. r 1 r2 r3 row i 0 1 3 6