SlideShare uma empresa Scribd logo
1 de 44
CHAPTER 2

ARRAYS AND STRUCTURES

CHAPTER 2

1
Arrays
Array: a set of index and value
data structure
For each index, there is a value associated with
that index.
representation (possible)
implemented by using consecutive memory.

CHAPTER 2

2
objects: A set of pairs <index, value> where for each value of index
there is a value from the set item. Index is a finite ordered set of one or
more dimensions, for example, {0, … , n-1} for one dimension,
{(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(2,0),(2,1),(2,2)} for two dimensions,
etc.
Functions:
for all A ∈ Array, i ∈ index, x ∈ item, j, size ∈ integer
Array Create(j, list) ::= return an array of j dimensions where list is a
j-tuple whose ith element is the size of the
ith dimension. Items are undefined.
Item Retrieve(A, i) ::= if (i ∈ index) return the item associated with
index value i in array A
else return error
Array Store(A, i, x) ::= if (i in index)
return an array that is identical to array
A except the new pair <i, x> has been
inserted else return error
CHAPTER 2
3
end array
Arrays in C
int list[5], *plist[5];
list[5]: five integers
list[0], list[1], list[2], list[3], list[4]
*plist[5]: five pointers to integers
plist[0], plist[1], plist[2], plist[3], plist[4]
implementation of 1-D array
list[0]
base address = α
list[1]
α + sizeof(int)
list[2]
α + 2*sizeof(int)
list[3]
α + 3*sizeof(int)
list[4]
α + 4*size(int)
CHAPTER 2
4
Arrays in C (Continued)
Compare int *list1 and int list2[5] in C.
Same: list1 and list2 are pointers.
Difference: list2 reserves five locations.
Notations:
list2 - a pointer to list2[0]
(list2 + i) - a pointer to list2[i]
*(list2 + i) - list2[i]

CHAPTER 2

(&list2[i])

5
Example: 1-dimension array addressing
int one[] = {0, 1, 2, 3, 4};
Goal: print out address and value
void print1(int *ptr, int rows)
{
/* print out a one-dimensional array using a pointer */
int i;
printf(“Address Contentsn”);
for (i=0; i < rows; i++)
printf(“%8u%5dn”, ptr+i, *(ptr+i));
printf(“n”);
}
CHAPTER 2

6
call print1(&one[0], 5)

Address

Contents

1228

0

1230

1

1232

2

1234

3

1236

4

*Figure 2.1: One- dimensional array addressing (p.53)

CHAPTER 2

7
Structures (records)
struct {
char name[10];
int age;
float salary;
} person;
strcpy(person.name, “james”);
person.age=10;
person.salary=35000;

CHAPTER 2

8
Create structure data type
typedef struct human_being {
char name[10];
int age;
float salary;
};
or
typedef struct {
char name[10];
int age;
float salary
} human_being;
human_being person1, person2;
CHAPTER 2
9
Unions

Similar to struct, but only one field is active.
Example: Add fields for male and female.
typedef struct sex_type {
enum tag_field {female, male} sex;
union {
int children;
int beard;
} u;
};
typedef struct human_being {
char name[10]; human_being person1, person2;
int age;
person1.sex_info.sex=male;
float salary;
person1.sex_info.u.beard=FALSE;
date dob;
sex_type sex_info;
}
CHAPTER 2
10
Self-Referential Structures
One or more of its components is a pointer to itself.
typedef
struct list Construct a list with three nodes
{
char data;
item1.link=&item2;
list *link;
item2.link=&item3;
}
malloc: obtain a node
list item1, item2, item3;
item1.data=‘a’;
a
b
item2.data=‘b’;
item3.data=‘c’;
item1.link=item2.link=item3.link=NULL;
CHAPTER 2

c

11
Ordered List Examples
ordered (linear) list: (item1, item2, item3, …, itemn)

(MONDAY, TUEDSAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAYY,
SUNDAY)
(2, 3, 4, 5, 6, 7, 8, 9, 10, Jack, Queen, King,
Ace)
(1941, 1942, 1943, 1944, 1945)
(a1, a2, a3, …, an-1, an)
CHAPTER 2

12
Operations on Ordered List
Find the length, n , of the list.
Read the items from left to right (or right to left).
Retrieve the i’th element.
Store a new value into the i’th position.
Insert a new element at the position i , causing elements
numbered i, i+1, …, n to become numbered
i+1, i+2, …, n+1
Delete the element at position i , causing elements numbered
i+1, …, n to become numbered i, i+1, …, n-1 array (sequential
mapping)? (1)~(4) O (5)~(6) X

CHAPTER 2

13
Polynomials A(X)=3X20+2X5+4, B(X)=X4+10X3+3X2+1

Structure Polynomial is
objects:
p( x ) = a1 x e1 + ... + an x en ; a set of ordered pairs of
<ei,ai> where ai in Coefficients and ei in Exponents, ei are integers >= 0
functions:
for all poly, poly1, poly2  Polynomial, coef Coefficients, expon
Exponents
Polynomial Zero( )
::= return the polynomial,
p(x) = 0
Boolean IsZero(poly)
::= if (poly) return FALSE
else return TRUE
Coefficient Coef(poly, expon)
::= if (expon  poly) return its
coefficient else return Zero
Exponent Lead_Exp(poly)
::= return the largest exponent in
poly
Polynomial Attach(poly,coef, expon) ::= if (expon  poly) return error
else return the polynomial poly
with the term <coef, expon>
inserted

CHAPTER 2

14
Polynomial Remove(poly, expon)

::= if (expon  poly) return the
polynomial poly with the
term whose exponent is
expon deleted
else return error
Polynomial SingleMult(poly, coef, expon) ::= return the polynomial
poly • coef • xexpon
Polynomial Add(poly1, poly2)
::= return the polynomial
poly1 +poly2
Polynomial Mult(poly1, poly2)
::= return the polynomial
poly1 • poly2

End Polynomial
*Structure 2.2:Abstract data type Polynomial (p.61)

CHAPTER 2

15
Polynomial Addition
data structure 1: #define MAX_DEGREE 101

typedef struct {
int degree;
float coef[MAX_DEGREE];
} polynomial;

/* d =a + b, where a, b, and d are polynomials */
d = Zero( )
while (! IsZero(a) && ! IsZero(b)) do {
switch COMPARE (Lead_Exp(a), Lead_Exp(b)) {
case -1: d =
Attach(d, Coef (b, Lead_Exp(b)), Lead_Exp(b));
b = Remove(b, Lead_Exp(b));
break;
case 0: sum = Coef (a, Lead_Exp (a)) + Coef ( b, Lead_Exp(b));
if (sum) {
Attach (d, sum, Lead_Exp(a));
a = Remove(a , Lead_Exp(a));
b = Remove(b , Lead_Exp(b));
}
CHAPTER 2
16
break;
case 1: d =
Attach(d, Coef (a, Lead_Exp(a)), Lead_Exp(a));
a = Remove(a, Lead_Exp(a));
}
}
insert any remaining terms of a or b into d

advantage: easy implementation
disadvantage: waste space when sparse
*Program 2.4 :Initial version of padd function(p.62)

CHAPTER 2

17
Data structure 2: use one global array to store all polynomials
A(X)=2X1000+1
B(X)=X4+10X3+3X2+1
starta finisha startb

coef
exp

*Figure 2.2: Array representation of two polynomials
(p.63)

finishb avail

2

1

1

10

3

1

1000

0

4

3

2

0

0

1

2

3

4

5

specification
poly
A
CHAPTER 2
B

representation
<start, finish>
<0,1>
18
<2,5>

6
storage requirements: start, finish, 2*(finish-start+1)
nonparse:
twice as much as (1)
when all the items are nonzero
MAX_TERMS 100 /* size of terms array */
typedef struct {
float coef;
int expon;
} polynomial;
polynomial terms[MAX_TERMS];
int avail = 0;
*(p.62)

CHAPTER 2

19
Add two polynomials: D = A + B
void padd (int starta, int finisha, int startb, int finishb,
int * startd, int *finishd)
{
/* add A(x) and B(x) to obtain D(x) */
float coefficient;
*startd = avail;
while (starta <= finisha && startb <= finishb)
switch (COMPARE(terms[starta].expon,
terms[startb].expon)) {
case -1: /* a expon < b expon */
attach(terms[startb].coef, terms[startb].expon);
startb++
break;
CHAPTER 2

20
case 0: /* equal exponents */
coefficient = terms[starta].coef +
terms[startb].coef;
if (coefficient)
attach (coefficient, terms[starta].expon);
starta++;
startb++;
break;
case 1: /* a expon > b expon */
attach(terms[starta].coef, terms[starta].expon);
starta++;
}

CHAPTER 2

21
/* add in remaining terms of A(x) */
for( ; starta <= finisha; starta++)
attach(terms[starta].coef, terms[starta].expon);
/* add in remaining terms of B(x) */
for( ; startb <= finishb; startb++)
attach(terms[startb].coef, terms[startb].expon);
*finishd =avail -1;
}
Analysis:

O(n+m)
where n (m) is the number of nonzeros in A(B).

*Program 2.5: Function to add two polynomial (p.64)

CHAPTER 2

22
void attach(float coefficient, int exponent)
{
/* add a new term to the polynomial */
if (avail >= MAX_TERMS) {
fprintf(stderr, “Too many terms in the polynomialn”);
exit(1);
}
terms[avail].coef = coefficient;
terms[avail++].expon = exponent;
}
*Program 2.6:Function to add anew term (p.65)

Problem:

Compaction is required
when polynomials that are no longer needed.
(data movement takes time.)
CHAPTER 2

23
Sparse Matrix
col1 col2 col3 col4 col5 col6

row0
row1
row2
row3
row4

5*3
(a)

row5

15/15

*Figure 2.3:Two matrices

15 0 0 22 0 − 15
 0 11 3
0 0
0


 0 0 0 −6 0
0


0 0 0
0 0
0

91 0 0
0 0
0


0 0
0
 0 0 28

 6*6

(b)

8/36

sparse matrix
data structure?
CHAPTER 2
24
SPARSE MATRIX ABSTRACT DATA TYPE
Structure Sparse_Matrix is
objects: a set of triples, <row, column, value>, where row
and column are integers and form a unique combination, and
value comes from the set item.
functions:
for all a, b ∈ Sparse_Matrix, x  item, i, j, max_col,
max_row  index
Sparse_Marix Create(max_row, max_col) ::=
return a Sparse_matrix that can hold up to
max_items = max _row  max_col and
whose maximum row size is max_row and
whose maximum column size is max_col.

CHAPTER 2

25
Sparse_Matrix Transpose(a) ::=
return the matrix produced by interchanging
the row and column value of every triple.
Sparse_Matrix Add(a, b) ::=
if the dimensions of a and b are the same
return the matrix produced by adding
corresponding items, namely those with
identical row and column values.
else return error
Sparse_Matrix Multiply(a, b) ::=
if number of columns in a equals number of
rows in b
return the matrix d produced by multiplying
a by b according to the formula: d [i] [j] =
(a[i][k]•b[k][j]) where d (i, j) is the (i,j)th
element
else return error.
CHAPTER 2
26
* Structure 2.3: Abstract data type Sparse-Matrix (p.68)
(1)
(2)

Represented by a two-dimensional array.
Sparse matrix wastes space.
Each element is characterized by <row, col, value>.
row col value

a[0]
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]

row col value

# of rows (columns)
# of nonzero terms

6 6
8
b[0]
0 0
15
[1]
0 3
22
[2]
0 5 -15
[3]
1 1
11 transpose [4]
1 2
3
[5]
2 3
-6
[6]
4 0
91
[7]
5 2
28
[8]
(a)
row, column in ascending order

6
0
0
1
2
2
3
3
5

6
0
4
1
1
5
0
2
0
(b)

8
15
91
11
3
28
22
-6
-15

*Figure 2.4:Sparse matrix and its transpose stored as triples (p.69)

CHAPTER 2

27
Sparse_matrix Create(max_row, max_col) ::=
#define MAX_TERMS 101 /* maximum number of terms +1*/
typedef struct {
int col;
# of rows (columns)
int row;
# of nonzero terms
int value;
} term;
term a[MAX_TERMS]

* (P.69)

CHAPTER 2

28
Transpose a Matrix
(1) for each row i
take element <i, j, value> and store it
in element <j, i, value> of the transpose.
difficulty: where to put <j, i, value>
(0, 0, 15) ====> (0, 0, 15)
(0, 3, 22) ====> (3, 0, 22)
(0, 5, -15) ====> (5, 0, -15)
(1, 1, 11) ====> (1, 1, 11)
Move elements down very often.
(2) For all elements in column j,
place element <i, j, value> in element <j, i, value>
CHAPTER 2

29
void transpose (term a[], term b[])
/* b is set to the transpose of a */
{
int n, i, j, currentb;
n = a[0].value; /* total number of elements */
b[0].row = a[0].col; /* rows in b = columns in a */
b[0].col = a[0].row; /*columns in b = rows in a */
b[0].value = n;
if (n > 0) {
/*non zero matrix */
currentb = 1;
for (i = 0; i < a[0].col; i++)
/* transpose by columns in a */
for( j = 1; j <= n; j++)
/* find elements from the current column */
if (a[j].col == i) {
/* element is in current column, add it to b */
CHAPTER 2

30
columns
elements
b[currentb].row = a[j].col;
b[currentb].col = a[j].row;
b[currentb].value = a[j].value;
currentb++
}
}
}
* Program 2.7: Transpose of a sparse matrix (p.71)

Scan the array “columns” times. ==> O(columns*elements)
The array has “elements” elements.
CHAPTER 2

31
Discussion: compared with 2-D array representation
O(columns*elements) vs. O(columns*rows)
elements --> columns * rows when nonsparse
O(columns*columns*rows)
Problem: Scan the array “columns” times.
Solution:
Determine the number of elements in each column of
the original matrix.
==>
Determine the starting positions of each row in the
transpose matrix.
CHAPTER 2

32
a[0]
a[1]
a[2]
a[3]
a[4]
a[5]
a[6]
a[7]
a[8]

6
0
0
0
1
1
2
4
5

6
8
0
15
3
22
5
-15
1
11
2
3
3
-6
0
91
2
28
[0] [1] [2] [3] [4] [5]
row_terms = 2 1 2 2 0 1
starting_pos = 1 3 4 6 8 8
CHAPTER 2

33
void fast_transpose(term a[ ], term b[ ])
{
/* the transpose of a is placed in b */
int row_terms[MAX_COL], starting_pos[MAX_COL];
int i, j, num_cols = a[0].col, num_terms = a[0].value;
b[0].row = num_cols; b[0].col = a[0].row;
b[0].value = num_terms;
if (num_terms > 0){ /*nonzero matrix*/
for (i = 0; i < num_cols; i++)
columns
row_terms[i] = 0;
for (i = 1; i <= num_terms; i++)
elements
row_term [a[i].col]++
starting_pos[0] = 1;
for (i =1; i < num_cols; i++)
columns
starting_pos[i]=starting_pos[i-1] +row_terms [i-1];
CHAPTER 2

34
elements

for (i=1; i <= num_terms, i++) {
j = starting_pos[a[i].col]++;
b[j].row = a[i].col;
b[j].col = a[i].row;
b[j].value = a[i].value;
}

}
}
*Program 2.8:Fast transpose of a sparse matrix

Compared with 2-D array representation
O(columns+elements) vs. O(columns*rows)
elements --> columns * rows
O(columns+elements) --> O(columns*rows)
Cost: Additional row_terms and starting_pos arrays are required.
Let the two arrays row_terms and starting_pos be shared.
CHAPTER 2
35
Sparse Matrix Multiplication
Definition: [D]m*p=[A]m*n* [B]n*p
Procedure: Fix a row of A and find all elements in column j
of B for j=0, 1, …, p-1.
Alternative 1. Scan all of B to find all elements in j.
Alternative 2. Compute the transpose of B.
(Put all column elements consecutively)

1 0 0 1 1 1 1 1 1
1 0 0 0 0 0 = 1 1 1


 

1 0 0 0 0 0 1 1 1


 

CHAPTER 2

*Figure 2.5:Multiplication of two sparse matrices (p.73)

36
An Example
A=

0
4

2
6

2
0
0
1
1
1
BT =

1
-1

3
0
2
0
1
2

5
1
2
-1
4
6

3
0
2

-1
0
0

0
0
5

B=

(0,0)
(0,2)

3
-1
0
3
0
0
1
2

3
0
(1,2) 0
2
2
CHAPTER 2
(1,0)

0
0
0
3
0
2
0
2

2
0
5
4
3
2
-1
5

3
0
1
0
2

4
3
-1
2
5

37
General Case
dij=ai0*b0j+ai1*b1j+…+ai(n-1)*b(n-1)j
a 本來依 i 成群,經轉置後, b 也依 j 成群。
a
b
c

Sa
Sb
Sc

d
e
f
g

Sd
Se
Sf
Sg

最多可以產生 ad, ae, af, ag,
bd, be, bf, bg,
cd, ce, cf, cg 等 entries 。
CHAPTER 2

38
void mmult (term a[ ], term b[ ], term d[ ] )
/* multiply two sparse matrices */
{
int i, j, column, totalb = b[].value, totald = 0;
int rows_a = a[0].row, cols_a = a[0].col,
totala = a[0].value; int cols_b = b[0].col,
int row_begin = 1, row = a[1].row, sum =0;
int new_b[MAX_TERMS][3];
if (cols_a != b[0].row){
fprintf (stderr, “Incompatible matricesn”);
exit (1);
}

CHAPTER 2

39
fast_transpose(b, new_b);
cols_b + totalb
/* set boundary condition */
a[totala+1].row = rows_a;
new_b[totalb+1].row = cols_b;
new_b[totalb+1].col = 0;
at most rows_a times
for (i = 1; i <= totala; ) {
column = new_b[1].row;
for (j = 1; j <= totalb+1;) {
/* mutiply row of a by column of b */
if (a[i].row != row) {
storesum(d, &totald, row, column, &sum);
i = row_begin;
for (; new_b[j].row == column; j++)
;
column =new_b[j].row
}
CHAPTER 2

40
else switch (COMPARE (a[i].col, new_b[j].col)) {
case -1: /* go to next term in a */
i++; break;
case 0: /* add terms, go to next term in a and b */
sum += (a[i++].value * new_b[j++].value);
break;
case 1: /* advance to next term in b*/
j++
}
} /* end of for j <= totalb+1 */
for (; a[i].row == row; i++)
;
row_begin = i; row = a[i].row;
} /* end of for i <=totala */
d[0].row = rows_a;
d[0].col = cols_b; d[0].value = totald;
}

*Praogram 2.9: Sparse matrix multiplication (p.75)

CHAPTER 2

41
Analyzing the algorithm
cols_b * termsrow1 + totalb +
cols_b * termsrow2 + totalb +
…+
cols_b * termsrowp + totalb
= cols_b * (termsrow1 + termsrow2 + … + termsrowp) +
rows_a * totalb
= cols_b * totala + row_a * totalb
O(cols_b * totala + rows_a * totalb)

CHAPTER 2

42
Compared with matrix multiplication using array
for (i =0; i < rows_a; i++)
for (j=0; j < cols_b; j++) {
sum =0;
for (k=0; k < cols_a; k++)
sum += (a[i][k] *b[k][j]);
d[i][j] =sum;
}
O(rows_a * cols_a * cols_b) vs.
O(cols_b * total_a + rows_a * total_b)
optimal case: total_a < rows_a * cols_a
total_b < cols_a * cols_b
worse case: total_a --> rows_a * cols_a, or
total_b --> cols_a * cols_b
CHAPTER 2
43
void storesum(term d[ ], int *totald, int row, int column,
int *sum)
{
/* if *sum != 0, then it along with its row and column
position is stored as the *totald+1 entry in d */
if (*sum)
if (*totald < MAX_TERMS) {
d[++*totald].row = row;
d[*totald].col = column;
d[*totald].value = *sum;
}
else {
fprintf(stderr, ”Numbers of terms in product
exceed %dn”, MAX_TERMS);
exit(1);
}
}

CHAPTER 2

Program 2.10: storsum function

44

Mais conteúdo relacionado

Mais procurados

Multidimensional array in C
Multidimensional array in CMultidimensional array in C
Multidimensional array in CSmit Parikh
 
Introduction to NumPy for Machine Learning Programmers
Introduction to NumPy for Machine Learning ProgrammersIntroduction to NumPy for Machine Learning Programmers
Introduction to NumPy for Machine Learning ProgrammersKimikazu Kato
 
Data structure array
Data structure  arrayData structure  array
Data structure arrayMajidHamidAli
 
Python3 cheatsheet
Python3 cheatsheetPython3 cheatsheet
Python3 cheatsheetGil Cohen
 
Introduction to Monads in Scala (1)
Introduction to Monads in Scala (1)Introduction to Monads in Scala (1)
Introduction to Monads in Scala (1)stasimus
 
Arrays in java language
Arrays in java languageArrays in java language
Arrays in java languageHareem Naz
 
Java: Introduction to Arrays
Java: Introduction to ArraysJava: Introduction to Arrays
Java: Introduction to ArraysTareq Hasan
 
Two dimensional array
Two dimensional arrayTwo dimensional array
Two dimensional arrayRajendran
 
Idea for ineractive programming language
Idea for ineractive programming languageIdea for ineractive programming language
Idea for ineractive programming languageLincoln Hannah
 
Introduction to Monads in Scala (2)
Introduction to Monads in Scala (2)Introduction to Monads in Scala (2)
Introduction to Monads in Scala (2)stasimus
 
Programs in array using SWIFT
Programs in array using SWIFTPrograms in array using SWIFT
Programs in array using SWIFTvikram mahendra
 
Python 2.5 reference card (2009)
Python 2.5 reference card (2009)Python 2.5 reference card (2009)
Python 2.5 reference card (2009)gekiaruj
 
C Programming : Arrays
C Programming : ArraysC Programming : Arrays
C Programming : ArraysGagan Deep
 
Array Introduction One-dimensional array Multidimensional array
Array Introduction One-dimensional array Multidimensional arrayArray Introduction One-dimensional array Multidimensional array
Array Introduction One-dimensional array Multidimensional arrayimtiazalijoono
 
Leet Code May Coding Challenge - DataStructure and Algorithm Problems
Leet Code May Coding Challenge - DataStructure and Algorithm ProblemsLeet Code May Coding Challenge - DataStructure and Algorithm Problems
Leet Code May Coding Challenge - DataStructure and Algorithm ProblemsSunil Yadav
 

Mais procurados (20)

Multidimensional array in C
Multidimensional array in CMultidimensional array in C
Multidimensional array in C
 
Arrays in java
Arrays in javaArrays in java
Arrays in java
 
Introduction to NumPy for Machine Learning Programmers
Introduction to NumPy for Machine Learning ProgrammersIntroduction to NumPy for Machine Learning Programmers
Introduction to NumPy for Machine Learning Programmers
 
Data structure array
Data structure  arrayData structure  array
Data structure array
 
Python3 cheatsheet
Python3 cheatsheetPython3 cheatsheet
Python3 cheatsheet
 
Introduction to Monads in Scala (1)
Introduction to Monads in Scala (1)Introduction to Monads in Scala (1)
Introduction to Monads in Scala (1)
 
2D Array
2D Array 2D Array
2D Array
 
Arrays in java language
Arrays in java languageArrays in java language
Arrays in java language
 
Java: Introduction to Arrays
Java: Introduction to ArraysJava: Introduction to Arrays
Java: Introduction to Arrays
 
Two dimensional array
Two dimensional arrayTwo dimensional array
Two dimensional array
 
Idea for ineractive programming language
Idea for ineractive programming languageIdea for ineractive programming language
Idea for ineractive programming language
 
Array lecture
Array lectureArray lecture
Array lecture
 
Introduction to Monads in Scala (2)
Introduction to Monads in Scala (2)Introduction to Monads in Scala (2)
Introduction to Monads in Scala (2)
 
Java arrays
Java    arraysJava    arrays
Java arrays
 
Programs in array using SWIFT
Programs in array using SWIFTPrograms in array using SWIFT
Programs in array using SWIFT
 
Python 2.5 reference card (2009)
Python 2.5 reference card (2009)Python 2.5 reference card (2009)
Python 2.5 reference card (2009)
 
C Programming : Arrays
C Programming : ArraysC Programming : Arrays
C Programming : Arrays
 
Array Introduction One-dimensional array Multidimensional array
Array Introduction One-dimensional array Multidimensional arrayArray Introduction One-dimensional array Multidimensional array
Array Introduction One-dimensional array Multidimensional array
 
Leet Code May Coding Challenge - DataStructure and Algorithm Problems
Leet Code May Coding Challenge - DataStructure and Algorithm ProblemsLeet Code May Coding Challenge - DataStructure and Algorithm Problems
Leet Code May Coding Challenge - DataStructure and Algorithm Problems
 
2- Dimensional Arrays
2- Dimensional Arrays2- Dimensional Arrays
2- Dimensional Arrays
 

Semelhante a Chapter2

Data structures KTU chapter2.PPT
Data structures KTU chapter2.PPTData structures KTU chapter2.PPT
Data structures KTU chapter2.PPTAlbin562191
 
Arrays and structures
Arrays and structuresArrays and structures
Arrays and structuresMohd Arif
 
Chap 2 Arrays and Structures.ppt
Chap 2  Arrays and Structures.pptChap 2  Arrays and Structures.ppt
Chap 2 Arrays and Structures.pptshashankbhadouria4
 
Chap 2 Arrays and Structures.pptx
Chap 2  Arrays and Structures.pptxChap 2  Arrays and Structures.pptx
Chap 2 Arrays and Structures.pptxshashankbhadouria4
 
B61301007 matlab documentation
B61301007 matlab documentationB61301007 matlab documentation
B61301007 matlab documentationManchireddy Reddy
 
Data Structure Midterm Lesson Arrays
Data Structure Midterm Lesson ArraysData Structure Midterm Lesson Arrays
Data Structure Midterm Lesson ArraysMaulen Bale
 
Using-Python-Libraries.9485146.powerpoint.pptx
Using-Python-Libraries.9485146.powerpoint.pptxUsing-Python-Libraries.9485146.powerpoint.pptx
Using-Python-Libraries.9485146.powerpoint.pptxUadAccount
 
MO 2020 DS Applications of Linked List 1 AB.ppt
MO 2020 DS Applications of Linked List 1 AB.pptMO 2020 DS Applications of Linked List 1 AB.ppt
MO 2020 DS Applications of Linked List 1 AB.pptshashankbhadouria4
 
A quick introduction to R
A quick introduction to RA quick introduction to R
A quick introduction to RAngshuman Saha
 
Lec 9 05_sept [compatibility mode]
Lec 9 05_sept [compatibility mode]Lec 9 05_sept [compatibility mode]
Lec 9 05_sept [compatibility mode]Palak Sanghani
 
Use the following data set that compares age to average years lef.docx
Use the following data set that compares age to average years lef.docxUse the following data set that compares age to average years lef.docx
Use the following data set that compares age to average years lef.docxdickonsondorris
 
Python programming workshop
Python programming workshopPython programming workshop
Python programming workshopBAINIDA
 
The Ring programming language version 1.8 book - Part 94 of 202
The Ring programming language version 1.8 book - Part 94 of 202The Ring programming language version 1.8 book - Part 94 of 202
The Ring programming language version 1.8 book - Part 94 of 202Mahmoud Samir Fayed
 

Semelhante a Chapter2 (20)

Data structures KTU chapter2.PPT
Data structures KTU chapter2.PPTData structures KTU chapter2.PPT
Data structures KTU chapter2.PPT
 
Arrays and structures
Arrays and structuresArrays and structures
Arrays and structures
 
Array
ArrayArray
Array
 
Arrays
ArraysArrays
Arrays
 
Chap 2 Arrays and Structures.ppt
Chap 2  Arrays and Structures.pptChap 2  Arrays and Structures.ppt
Chap 2 Arrays and Structures.ppt
 
Chap 2 Arrays and Structures.pptx
Chap 2  Arrays and Structures.pptxChap 2  Arrays and Structures.pptx
Chap 2 Arrays and Structures.pptx
 
B61301007 matlab documentation
B61301007 matlab documentationB61301007 matlab documentation
B61301007 matlab documentation
 
Data Structure Midterm Lesson Arrays
Data Structure Midterm Lesson ArraysData Structure Midterm Lesson Arrays
Data Structure Midterm Lesson Arrays
 
Using-Python-Libraries.9485146.powerpoint.pptx
Using-Python-Libraries.9485146.powerpoint.pptxUsing-Python-Libraries.9485146.powerpoint.pptx
Using-Python-Libraries.9485146.powerpoint.pptx
 
MO 2020 DS Applications of Linked List 1 AB.ppt
MO 2020 DS Applications of Linked List 1 AB.pptMO 2020 DS Applications of Linked List 1 AB.ppt
MO 2020 DS Applications of Linked List 1 AB.ppt
 
Op ps
Op psOp ps
Op ps
 
A quick introduction to R
A quick introduction to RA quick introduction to R
A quick introduction to R
 
Lec 9 05_sept [compatibility mode]
Lec 9 05_sept [compatibility mode]Lec 9 05_sept [compatibility mode]
Lec 9 05_sept [compatibility mode]
 
Spark workshop
Spark workshopSpark workshop
Spark workshop
 
Scala by Luc Duponcheel
Scala by Luc DuponcheelScala by Luc Duponcheel
Scala by Luc Duponcheel
 
Use the following data set that compares age to average years lef.docx
Use the following data set that compares age to average years lef.docxUse the following data set that compares age to average years lef.docx
Use the following data set that compares age to average years lef.docx
 
Python programming workshop
Python programming workshopPython programming workshop
Python programming workshop
 
The Ring programming language version 1.8 book - Part 94 of 202
The Ring programming language version 1.8 book - Part 94 of 202The Ring programming language version 1.8 book - Part 94 of 202
The Ring programming language version 1.8 book - Part 94 of 202
 
Stacks.ppt
Stacks.pptStacks.ppt
Stacks.ppt
 
Stacks.ppt
Stacks.pptStacks.ppt
Stacks.ppt
 

Último

Muzaffarpur Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Muzaffarpur Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMuzaffarpur Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Muzaffarpur Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
Austria vs France Austria Euro 2024 squad Ralf Rangnick's full team ahead of ...
Austria vs France Austria Euro 2024 squad Ralf Rangnick's full team ahead of ...Austria vs France Austria Euro 2024 squad Ralf Rangnick's full team ahead of ...
Austria vs France Austria Euro 2024 squad Ralf Rangnick's full team ahead of ...Eticketing.co
 
Spain Vs Italy Spain to be banned from participating in Euro 2024.docx
Spain Vs Italy Spain to be banned from participating in Euro 2024.docxSpain Vs Italy Spain to be banned from participating in Euro 2024.docx
Spain Vs Italy Spain to be banned from participating in Euro 2024.docxWorld Wide Tickets And Hospitality
 
Ramban Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts In...
Ramban  Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts In...Ramban  Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts In...
Ramban Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts In...Nitya salvi
 
WhatsApp Chat: 📞 8617697112 Birbhum Call Girl available for hotel room package
WhatsApp Chat: 📞 8617697112 Birbhum  Call Girl available for hotel room packageWhatsApp Chat: 📞 8617697112 Birbhum  Call Girl available for hotel room package
WhatsApp Chat: 📞 8617697112 Birbhum Call Girl available for hotel room packageNitya salvi
 
European Football Icons that Missed Opportunities at UEFA Euro 2024.docx
European Football Icons that Missed Opportunities at UEFA Euro 2024.docxEuropean Football Icons that Missed Opportunities at UEFA Euro 2024.docx
European Football Icons that Missed Opportunities at UEFA Euro 2024.docxEuro Cup 2024 Tickets
 
Personal Brand Exploration - By Bradley Dennis
Personal Brand Exploration - By Bradley DennisPersonal Brand Exploration - By Bradley Dennis
Personal Brand Exploration - By Bradley Dennisjocksofalltradespodc
 
2k Shots ≽ 9205541914 ≼ Call Girls In Sheikh Sarai (Delhi)
2k Shots ≽ 9205541914 ≼ Call Girls In Sheikh Sarai (Delhi)2k Shots ≽ 9205541914 ≼ Call Girls In Sheikh Sarai (Delhi)
2k Shots ≽ 9205541914 ≼ Call Girls In Sheikh Sarai (Delhi)Delhi Call girls
 
Sector 62, Noida Call girls :8448380779 Model Escorts | 100% verified
Sector 62, Noida Call girls :8448380779 Model Escorts | 100% verifiedSector 62, Noida Call girls :8448380779 Model Escorts | 100% verified
Sector 62, Noida Call girls :8448380779 Model Escorts | 100% verifiedDelhi Call girls
 
Hire 💕 8617697112 Kasauli Call Girls Service Call Girls Agency
Hire 💕 8617697112 Kasauli Call Girls Service Call Girls AgencyHire 💕 8617697112 Kasauli Call Girls Service Call Girls Agency
Hire 💕 8617697112 Kasauli Call Girls Service Call Girls AgencyNitya salvi
 
Italy vs Albania Italy Euro 2024 squad Luciano Spalletti's full team ahead of...
Italy vs Albania Italy Euro 2024 squad Luciano Spalletti's full team ahead of...Italy vs Albania Italy Euro 2024 squad Luciano Spalletti's full team ahead of...
Italy vs Albania Italy Euro 2024 squad Luciano Spalletti's full team ahead of...Eticketing.co
 
Exploring Euro Cup 2024 Host Cities in Germany Top Attractions and Accommodat...
Exploring Euro Cup 2024 Host Cities in Germany Top Attractions and Accommodat...Exploring Euro Cup 2024 Host Cities in Germany Top Attractions and Accommodat...
Exploring Euro Cup 2024 Host Cities in Germany Top Attractions and Accommodat...Euro Cup 2024 Tickets
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
Technical Data | Sig Sauer Easy6 BDX 1-6x24 | Optics Trade
Technical Data | Sig Sauer Easy6 BDX 1-6x24 | Optics TradeTechnical Data | Sig Sauer Easy6 BDX 1-6x24 | Optics Trade
Technical Data | Sig Sauer Easy6 BDX 1-6x24 | Optics TradeOptics-Trade
 
Netherlands Players expected to miss UEFA Euro 2024 due to injury.docx
Netherlands Players expected to miss UEFA Euro 2024 due to injury.docxNetherlands Players expected to miss UEFA Euro 2024 due to injury.docx
Netherlands Players expected to miss UEFA Euro 2024 due to injury.docxEuro Cup 2024 Tickets
 
Albania Vs Spain South American coaches lead Albania to Euro 2024 spot.docx
Albania Vs Spain South American coaches lead Albania to Euro 2024 spot.docxAlbania Vs Spain South American coaches lead Albania to Euro 2024 spot.docx
Albania Vs Spain South American coaches lead Albania to Euro 2024 spot.docxWorld Wide Tickets And Hospitality
 
JORNADA 6 LIGA MURO 2024TUXTEPECOAXACA.pdf
JORNADA 6 LIGA MURO 2024TUXTEPECOAXACA.pdfJORNADA 6 LIGA MURO 2024TUXTEPECOAXACA.pdf
JORNADA 6 LIGA MURO 2024TUXTEPECOAXACA.pdfArturo Pacheco Alvarez
 
Cricket Api Solution.pdfCricket Api Solution.pdf
Cricket Api Solution.pdfCricket Api Solution.pdfCricket Api Solution.pdfCricket Api Solution.pdf
Cricket Api Solution.pdfCricket Api Solution.pdfLatiyalinfotech
 
Unveiling the Mystery of Main Bazar Chart
Unveiling the Mystery of Main Bazar ChartUnveiling the Mystery of Main Bazar Chart
Unveiling the Mystery of Main Bazar ChartChart Kalyan
 

Último (20)

Muzaffarpur Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Muzaffarpur Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMuzaffarpur Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Muzaffarpur Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Slovenia Vs Serbia Eurovision odds Slovenia have top.docx
Slovenia Vs Serbia Eurovision odds Slovenia have top.docxSlovenia Vs Serbia Eurovision odds Slovenia have top.docx
Slovenia Vs Serbia Eurovision odds Slovenia have top.docx
 
Austria vs France Austria Euro 2024 squad Ralf Rangnick's full team ahead of ...
Austria vs France Austria Euro 2024 squad Ralf Rangnick's full team ahead of ...Austria vs France Austria Euro 2024 squad Ralf Rangnick's full team ahead of ...
Austria vs France Austria Euro 2024 squad Ralf Rangnick's full team ahead of ...
 
Spain Vs Italy Spain to be banned from participating in Euro 2024.docx
Spain Vs Italy Spain to be banned from participating in Euro 2024.docxSpain Vs Italy Spain to be banned from participating in Euro 2024.docx
Spain Vs Italy Spain to be banned from participating in Euro 2024.docx
 
Ramban Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts In...
Ramban  Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts In...Ramban  Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts In...
Ramban Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts In...
 
WhatsApp Chat: 📞 8617697112 Birbhum Call Girl available for hotel room package
WhatsApp Chat: 📞 8617697112 Birbhum  Call Girl available for hotel room packageWhatsApp Chat: 📞 8617697112 Birbhum  Call Girl available for hotel room package
WhatsApp Chat: 📞 8617697112 Birbhum Call Girl available for hotel room package
 
European Football Icons that Missed Opportunities at UEFA Euro 2024.docx
European Football Icons that Missed Opportunities at UEFA Euro 2024.docxEuropean Football Icons that Missed Opportunities at UEFA Euro 2024.docx
European Football Icons that Missed Opportunities at UEFA Euro 2024.docx
 
Personal Brand Exploration - By Bradley Dennis
Personal Brand Exploration - By Bradley DennisPersonal Brand Exploration - By Bradley Dennis
Personal Brand Exploration - By Bradley Dennis
 
2k Shots ≽ 9205541914 ≼ Call Girls In Sheikh Sarai (Delhi)
2k Shots ≽ 9205541914 ≼ Call Girls In Sheikh Sarai (Delhi)2k Shots ≽ 9205541914 ≼ Call Girls In Sheikh Sarai (Delhi)
2k Shots ≽ 9205541914 ≼ Call Girls In Sheikh Sarai (Delhi)
 
Sector 62, Noida Call girls :8448380779 Model Escorts | 100% verified
Sector 62, Noida Call girls :8448380779 Model Escorts | 100% verifiedSector 62, Noida Call girls :8448380779 Model Escorts | 100% verified
Sector 62, Noida Call girls :8448380779 Model Escorts | 100% verified
 
Hire 💕 8617697112 Kasauli Call Girls Service Call Girls Agency
Hire 💕 8617697112 Kasauli Call Girls Service Call Girls AgencyHire 💕 8617697112 Kasauli Call Girls Service Call Girls Agency
Hire 💕 8617697112 Kasauli Call Girls Service Call Girls Agency
 
Italy vs Albania Italy Euro 2024 squad Luciano Spalletti's full team ahead of...
Italy vs Albania Italy Euro 2024 squad Luciano Spalletti's full team ahead of...Italy vs Albania Italy Euro 2024 squad Luciano Spalletti's full team ahead of...
Italy vs Albania Italy Euro 2024 squad Luciano Spalletti's full team ahead of...
 
Exploring Euro Cup 2024 Host Cities in Germany Top Attractions and Accommodat...
Exploring Euro Cup 2024 Host Cities in Germany Top Attractions and Accommodat...Exploring Euro Cup 2024 Host Cities in Germany Top Attractions and Accommodat...
Exploring Euro Cup 2024 Host Cities in Germany Top Attractions and Accommodat...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Technical Data | Sig Sauer Easy6 BDX 1-6x24 | Optics Trade
Technical Data | Sig Sauer Easy6 BDX 1-6x24 | Optics TradeTechnical Data | Sig Sauer Easy6 BDX 1-6x24 | Optics Trade
Technical Data | Sig Sauer Easy6 BDX 1-6x24 | Optics Trade
 
Netherlands Players expected to miss UEFA Euro 2024 due to injury.docx
Netherlands Players expected to miss UEFA Euro 2024 due to injury.docxNetherlands Players expected to miss UEFA Euro 2024 due to injury.docx
Netherlands Players expected to miss UEFA Euro 2024 due to injury.docx
 
Albania Vs Spain South American coaches lead Albania to Euro 2024 spot.docx
Albania Vs Spain South American coaches lead Albania to Euro 2024 spot.docxAlbania Vs Spain South American coaches lead Albania to Euro 2024 spot.docx
Albania Vs Spain South American coaches lead Albania to Euro 2024 spot.docx
 
JORNADA 6 LIGA MURO 2024TUXTEPECOAXACA.pdf
JORNADA 6 LIGA MURO 2024TUXTEPECOAXACA.pdfJORNADA 6 LIGA MURO 2024TUXTEPECOAXACA.pdf
JORNADA 6 LIGA MURO 2024TUXTEPECOAXACA.pdf
 
Cricket Api Solution.pdfCricket Api Solution.pdf
Cricket Api Solution.pdfCricket Api Solution.pdfCricket Api Solution.pdfCricket Api Solution.pdf
Cricket Api Solution.pdfCricket Api Solution.pdf
 
Unveiling the Mystery of Main Bazar Chart
Unveiling the Mystery of Main Bazar ChartUnveiling the Mystery of Main Bazar Chart
Unveiling the Mystery of Main Bazar Chart
 

Chapter2

  • 1. CHAPTER 2 ARRAYS AND STRUCTURES CHAPTER 2 1
  • 2. Arrays Array: a set of index and value data structure For each index, there is a value associated with that index. representation (possible) implemented by using consecutive memory. CHAPTER 2 2
  • 3. objects: A set of pairs <index, value> where for each value of index there is a value from the set item. Index is a finite ordered set of one or more dimensions, for example, {0, … , n-1} for one dimension, {(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(2,0),(2,1),(2,2)} for two dimensions, etc. Functions: for all A ∈ Array, i ∈ index, x ∈ item, j, size ∈ integer Array Create(j, list) ::= return an array of j dimensions where list is a j-tuple whose ith element is the size of the ith dimension. Items are undefined. Item Retrieve(A, i) ::= if (i ∈ index) return the item associated with index value i in array A else return error Array Store(A, i, x) ::= if (i in index) return an array that is identical to array A except the new pair <i, x> has been inserted else return error CHAPTER 2 3 end array
  • 4. Arrays in C int list[5], *plist[5]; list[5]: five integers list[0], list[1], list[2], list[3], list[4] *plist[5]: five pointers to integers plist[0], plist[1], plist[2], plist[3], plist[4] implementation of 1-D array list[0] base address = α list[1] α + sizeof(int) list[2] α + 2*sizeof(int) list[3] α + 3*sizeof(int) list[4] α + 4*size(int) CHAPTER 2 4
  • 5. Arrays in C (Continued) Compare int *list1 and int list2[5] in C. Same: list1 and list2 are pointers. Difference: list2 reserves five locations. Notations: list2 - a pointer to list2[0] (list2 + i) - a pointer to list2[i] *(list2 + i) - list2[i] CHAPTER 2 (&list2[i]) 5
  • 6. Example: 1-dimension array addressing int one[] = {0, 1, 2, 3, 4}; Goal: print out address and value void print1(int *ptr, int rows) { /* print out a one-dimensional array using a pointer */ int i; printf(“Address Contentsn”); for (i=0; i < rows; i++) printf(“%8u%5dn”, ptr+i, *(ptr+i)); printf(“n”); } CHAPTER 2 6
  • 7. call print1(&one[0], 5) Address Contents 1228 0 1230 1 1232 2 1234 3 1236 4 *Figure 2.1: One- dimensional array addressing (p.53) CHAPTER 2 7
  • 8. Structures (records) struct { char name[10]; int age; float salary; } person; strcpy(person.name, “james”); person.age=10; person.salary=35000; CHAPTER 2 8
  • 9. Create structure data type typedef struct human_being { char name[10]; int age; float salary; }; or typedef struct { char name[10]; int age; float salary } human_being; human_being person1, person2; CHAPTER 2 9
  • 10. Unions Similar to struct, but only one field is active. Example: Add fields for male and female. typedef struct sex_type { enum tag_field {female, male} sex; union { int children; int beard; } u; }; typedef struct human_being { char name[10]; human_being person1, person2; int age; person1.sex_info.sex=male; float salary; person1.sex_info.u.beard=FALSE; date dob; sex_type sex_info; } CHAPTER 2 10
  • 11. Self-Referential Structures One or more of its components is a pointer to itself. typedef struct list Construct a list with three nodes { char data; item1.link=&item2; list *link; item2.link=&item3; } malloc: obtain a node list item1, item2, item3; item1.data=‘a’; a b item2.data=‘b’; item3.data=‘c’; item1.link=item2.link=item3.link=NULL; CHAPTER 2 c 11
  • 12. Ordered List Examples ordered (linear) list: (item1, item2, item3, …, itemn) (MONDAY, TUEDSAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAYY, SUNDAY) (2, 3, 4, 5, 6, 7, 8, 9, 10, Jack, Queen, King, Ace) (1941, 1942, 1943, 1944, 1945) (a1, a2, a3, …, an-1, an) CHAPTER 2 12
  • 13. Operations on Ordered List Find the length, n , of the list. Read the items from left to right (or right to left). Retrieve the i’th element. Store a new value into the i’th position. Insert a new element at the position i , causing elements numbered i, i+1, …, n to become numbered i+1, i+2, …, n+1 Delete the element at position i , causing elements numbered i+1, …, n to become numbered i, i+1, …, n-1 array (sequential mapping)? (1)~(4) O (5)~(6) X CHAPTER 2 13
  • 14. Polynomials A(X)=3X20+2X5+4, B(X)=X4+10X3+3X2+1 Structure Polynomial is objects: p( x ) = a1 x e1 + ... + an x en ; a set of ordered pairs of <ei,ai> where ai in Coefficients and ei in Exponents, ei are integers >= 0 functions: for all poly, poly1, poly2  Polynomial, coef Coefficients, expon Exponents Polynomial Zero( ) ::= return the polynomial, p(x) = 0 Boolean IsZero(poly) ::= if (poly) return FALSE else return TRUE Coefficient Coef(poly, expon) ::= if (expon  poly) return its coefficient else return Zero Exponent Lead_Exp(poly) ::= return the largest exponent in poly Polynomial Attach(poly,coef, expon) ::= if (expon  poly) return error else return the polynomial poly with the term <coef, expon> inserted CHAPTER 2 14
  • 15. Polynomial Remove(poly, expon) ::= if (expon  poly) return the polynomial poly with the term whose exponent is expon deleted else return error Polynomial SingleMult(poly, coef, expon) ::= return the polynomial poly • coef • xexpon Polynomial Add(poly1, poly2) ::= return the polynomial poly1 +poly2 Polynomial Mult(poly1, poly2) ::= return the polynomial poly1 • poly2 End Polynomial *Structure 2.2:Abstract data type Polynomial (p.61) CHAPTER 2 15
  • 16. Polynomial Addition data structure 1: #define MAX_DEGREE 101 typedef struct { int degree; float coef[MAX_DEGREE]; } polynomial; /* d =a + b, where a, b, and d are polynomials */ d = Zero( ) while (! IsZero(a) && ! IsZero(b)) do { switch COMPARE (Lead_Exp(a), Lead_Exp(b)) { case -1: d = Attach(d, Coef (b, Lead_Exp(b)), Lead_Exp(b)); b = Remove(b, Lead_Exp(b)); break; case 0: sum = Coef (a, Lead_Exp (a)) + Coef ( b, Lead_Exp(b)); if (sum) { Attach (d, sum, Lead_Exp(a)); a = Remove(a , Lead_Exp(a)); b = Remove(b , Lead_Exp(b)); } CHAPTER 2 16 break;
  • 17. case 1: d = Attach(d, Coef (a, Lead_Exp(a)), Lead_Exp(a)); a = Remove(a, Lead_Exp(a)); } } insert any remaining terms of a or b into d advantage: easy implementation disadvantage: waste space when sparse *Program 2.4 :Initial version of padd function(p.62) CHAPTER 2 17
  • 18. Data structure 2: use one global array to store all polynomials A(X)=2X1000+1 B(X)=X4+10X3+3X2+1 starta finisha startb coef exp *Figure 2.2: Array representation of two polynomials (p.63) finishb avail 2 1 1 10 3 1 1000 0 4 3 2 0 0 1 2 3 4 5 specification poly A CHAPTER 2 B representation <start, finish> <0,1> 18 <2,5> 6
  • 19. storage requirements: start, finish, 2*(finish-start+1) nonparse: twice as much as (1) when all the items are nonzero MAX_TERMS 100 /* size of terms array */ typedef struct { float coef; int expon; } polynomial; polynomial terms[MAX_TERMS]; int avail = 0; *(p.62) CHAPTER 2 19
  • 20. Add two polynomials: D = A + B void padd (int starta, int finisha, int startb, int finishb, int * startd, int *finishd) { /* add A(x) and B(x) to obtain D(x) */ float coefficient; *startd = avail; while (starta <= finisha && startb <= finishb) switch (COMPARE(terms[starta].expon, terms[startb].expon)) { case -1: /* a expon < b expon */ attach(terms[startb].coef, terms[startb].expon); startb++ break; CHAPTER 2 20
  • 21. case 0: /* equal exponents */ coefficient = terms[starta].coef + terms[startb].coef; if (coefficient) attach (coefficient, terms[starta].expon); starta++; startb++; break; case 1: /* a expon > b expon */ attach(terms[starta].coef, terms[starta].expon); starta++; } CHAPTER 2 21
  • 22. /* add in remaining terms of A(x) */ for( ; starta <= finisha; starta++) attach(terms[starta].coef, terms[starta].expon); /* add in remaining terms of B(x) */ for( ; startb <= finishb; startb++) attach(terms[startb].coef, terms[startb].expon); *finishd =avail -1; } Analysis: O(n+m) where n (m) is the number of nonzeros in A(B). *Program 2.5: Function to add two polynomial (p.64) CHAPTER 2 22
  • 23. void attach(float coefficient, int exponent) { /* add a new term to the polynomial */ if (avail >= MAX_TERMS) { fprintf(stderr, “Too many terms in the polynomialn”); exit(1); } terms[avail].coef = coefficient; terms[avail++].expon = exponent; } *Program 2.6:Function to add anew term (p.65) Problem: Compaction is required when polynomials that are no longer needed. (data movement takes time.) CHAPTER 2 23
  • 24. Sparse Matrix col1 col2 col3 col4 col5 col6 row0 row1 row2 row3 row4 5*3 (a) row5 15/15 *Figure 2.3:Two matrices 15 0 0 22 0 − 15  0 11 3 0 0 0    0 0 0 −6 0 0   0 0 0 0 0 0  91 0 0 0 0 0   0 0 0  0 0 28   6*6 (b) 8/36 sparse matrix data structure? CHAPTER 2 24
  • 25. SPARSE MATRIX ABSTRACT DATA TYPE Structure Sparse_Matrix is objects: a set of triples, <row, column, value>, where row and column are integers and form a unique combination, and value comes from the set item. functions: for all a, b ∈ Sparse_Matrix, x  item, i, j, max_col, max_row  index Sparse_Marix Create(max_row, max_col) ::= return a Sparse_matrix that can hold up to max_items = max _row  max_col and whose maximum row size is max_row and whose maximum column size is max_col. CHAPTER 2 25
  • 26. Sparse_Matrix Transpose(a) ::= return the matrix produced by interchanging the row and column value of every triple. Sparse_Matrix Add(a, b) ::= if the dimensions of a and b are the same return the matrix produced by adding corresponding items, namely those with identical row and column values. else return error Sparse_Matrix Multiply(a, b) ::= if number of columns in a equals number of rows in b return the matrix d produced by multiplying a by b according to the formula: d [i] [j] = (a[i][k]•b[k][j]) where d (i, j) is the (i,j)th element else return error. CHAPTER 2 26 * Structure 2.3: Abstract data type Sparse-Matrix (p.68)
  • 27. (1) (2) Represented by a two-dimensional array. Sparse matrix wastes space. Each element is characterized by <row, col, value>. row col value a[0] [1] [2] [3] [4] [5] [6] [7] [8] row col value # of rows (columns) # of nonzero terms 6 6 8 b[0] 0 0 15 [1] 0 3 22 [2] 0 5 -15 [3] 1 1 11 transpose [4] 1 2 3 [5] 2 3 -6 [6] 4 0 91 [7] 5 2 28 [8] (a) row, column in ascending order 6 0 0 1 2 2 3 3 5 6 0 4 1 1 5 0 2 0 (b) 8 15 91 11 3 28 22 -6 -15 *Figure 2.4:Sparse matrix and its transpose stored as triples (p.69) CHAPTER 2 27
  • 28. Sparse_matrix Create(max_row, max_col) ::= #define MAX_TERMS 101 /* maximum number of terms +1*/ typedef struct { int col; # of rows (columns) int row; # of nonzero terms int value; } term; term a[MAX_TERMS] * (P.69) CHAPTER 2 28
  • 29. Transpose a Matrix (1) for each row i take element <i, j, value> and store it in element <j, i, value> of the transpose. difficulty: where to put <j, i, value> (0, 0, 15) ====> (0, 0, 15) (0, 3, 22) ====> (3, 0, 22) (0, 5, -15) ====> (5, 0, -15) (1, 1, 11) ====> (1, 1, 11) Move elements down very often. (2) For all elements in column j, place element <i, j, value> in element <j, i, value> CHAPTER 2 29
  • 30. void transpose (term a[], term b[]) /* b is set to the transpose of a */ { int n, i, j, currentb; n = a[0].value; /* total number of elements */ b[0].row = a[0].col; /* rows in b = columns in a */ b[0].col = a[0].row; /*columns in b = rows in a */ b[0].value = n; if (n > 0) { /*non zero matrix */ currentb = 1; for (i = 0; i < a[0].col; i++) /* transpose by columns in a */ for( j = 1; j <= n; j++) /* find elements from the current column */ if (a[j].col == i) { /* element is in current column, add it to b */ CHAPTER 2 30
  • 31. columns elements b[currentb].row = a[j].col; b[currentb].col = a[j].row; b[currentb].value = a[j].value; currentb++ } } } * Program 2.7: Transpose of a sparse matrix (p.71) Scan the array “columns” times. ==> O(columns*elements) The array has “elements” elements. CHAPTER 2 31
  • 32. Discussion: compared with 2-D array representation O(columns*elements) vs. O(columns*rows) elements --> columns * rows when nonsparse O(columns*columns*rows) Problem: Scan the array “columns” times. Solution: Determine the number of elements in each column of the original matrix. ==> Determine the starting positions of each row in the transpose matrix. CHAPTER 2 32
  • 33. a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] 6 0 0 0 1 1 2 4 5 6 8 0 15 3 22 5 -15 1 11 2 3 3 -6 0 91 2 28 [0] [1] [2] [3] [4] [5] row_terms = 2 1 2 2 0 1 starting_pos = 1 3 4 6 8 8 CHAPTER 2 33
  • 34. void fast_transpose(term a[ ], term b[ ]) { /* the transpose of a is placed in b */ int row_terms[MAX_COL], starting_pos[MAX_COL]; int i, j, num_cols = a[0].col, num_terms = a[0].value; b[0].row = num_cols; b[0].col = a[0].row; b[0].value = num_terms; if (num_terms > 0){ /*nonzero matrix*/ for (i = 0; i < num_cols; i++) columns row_terms[i] = 0; for (i = 1; i <= num_terms; i++) elements row_term [a[i].col]++ starting_pos[0] = 1; for (i =1; i < num_cols; i++) columns starting_pos[i]=starting_pos[i-1] +row_terms [i-1]; CHAPTER 2 34
  • 35. elements for (i=1; i <= num_terms, i++) { j = starting_pos[a[i].col]++; b[j].row = a[i].col; b[j].col = a[i].row; b[j].value = a[i].value; } } } *Program 2.8:Fast transpose of a sparse matrix Compared with 2-D array representation O(columns+elements) vs. O(columns*rows) elements --> columns * rows O(columns+elements) --> O(columns*rows) Cost: Additional row_terms and starting_pos arrays are required. Let the two arrays row_terms and starting_pos be shared. CHAPTER 2 35
  • 36. Sparse Matrix Multiplication Definition: [D]m*p=[A]m*n* [B]n*p Procedure: Fix a row of A and find all elements in column j of B for j=0, 1, …, p-1. Alternative 1. Scan all of B to find all elements in j. Alternative 2. Compute the transpose of B. (Put all column elements consecutively) 1 0 0 1 1 1 1 1 1 1 0 0 0 0 0 = 1 1 1      1 0 0 0 0 0 1 1 1      CHAPTER 2 *Figure 2.5:Multiplication of two sparse matrices (p.73) 36
  • 38. General Case dij=ai0*b0j+ai1*b1j+…+ai(n-1)*b(n-1)j a 本來依 i 成群,經轉置後, b 也依 j 成群。 a b c Sa Sb Sc d e f g Sd Se Sf Sg 最多可以產生 ad, ae, af, ag, bd, be, bf, bg, cd, ce, cf, cg 等 entries 。 CHAPTER 2 38
  • 39. void mmult (term a[ ], term b[ ], term d[ ] ) /* multiply two sparse matrices */ { int i, j, column, totalb = b[].value, totald = 0; int rows_a = a[0].row, cols_a = a[0].col, totala = a[0].value; int cols_b = b[0].col, int row_begin = 1, row = a[1].row, sum =0; int new_b[MAX_TERMS][3]; if (cols_a != b[0].row){ fprintf (stderr, “Incompatible matricesn”); exit (1); } CHAPTER 2 39
  • 40. fast_transpose(b, new_b); cols_b + totalb /* set boundary condition */ a[totala+1].row = rows_a; new_b[totalb+1].row = cols_b; new_b[totalb+1].col = 0; at most rows_a times for (i = 1; i <= totala; ) { column = new_b[1].row; for (j = 1; j <= totalb+1;) { /* mutiply row of a by column of b */ if (a[i].row != row) { storesum(d, &totald, row, column, &sum); i = row_begin; for (; new_b[j].row == column; j++) ; column =new_b[j].row } CHAPTER 2 40
  • 41. else switch (COMPARE (a[i].col, new_b[j].col)) { case -1: /* go to next term in a */ i++; break; case 0: /* add terms, go to next term in a and b */ sum += (a[i++].value * new_b[j++].value); break; case 1: /* advance to next term in b*/ j++ } } /* end of for j <= totalb+1 */ for (; a[i].row == row; i++) ; row_begin = i; row = a[i].row; } /* end of for i <=totala */ d[0].row = rows_a; d[0].col = cols_b; d[0].value = totald; } *Praogram 2.9: Sparse matrix multiplication (p.75) CHAPTER 2 41
  • 42. Analyzing the algorithm cols_b * termsrow1 + totalb + cols_b * termsrow2 + totalb + …+ cols_b * termsrowp + totalb = cols_b * (termsrow1 + termsrow2 + … + termsrowp) + rows_a * totalb = cols_b * totala + row_a * totalb O(cols_b * totala + rows_a * totalb) CHAPTER 2 42
  • 43. Compared with matrix multiplication using array for (i =0; i < rows_a; i++) for (j=0; j < cols_b; j++) { sum =0; for (k=0; k < cols_a; k++) sum += (a[i][k] *b[k][j]); d[i][j] =sum; } O(rows_a * cols_a * cols_b) vs. O(cols_b * total_a + rows_a * total_b) optimal case: total_a < rows_a * cols_a total_b < cols_a * cols_b worse case: total_a --> rows_a * cols_a, or total_b --> cols_a * cols_b CHAPTER 2 43
  • 44. void storesum(term d[ ], int *totald, int row, int column, int *sum) { /* if *sum != 0, then it along with its row and column position is stored as the *totald+1 entry in d */ if (*sum) if (*totald < MAX_TERMS) { d[++*totald].row = row; d[*totald].col = column; d[*totald].value = *sum; } else { fprintf(stderr, ”Numbers of terms in product exceed %dn”, MAX_TERMS); exit(1); } } CHAPTER 2 Program 2.10: storsum function 44