arrays - seoul national universityocw.snu.ac.kr/sites/default/files/note/5413.pdf · 2018-01-30 ·...
TRANSCRIPT
![Page 1: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/1.jpg)
1
Arrays
Introduction to Data Structures
Kyuseok Shim
SoEECS, SNU.
![Page 2: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/2.jpg)
2
Topics
Abstract Data Types and the C++ Class
Array As Abstract Data Type
Polynomial Abstract Data Type
Sparse Matrices
Representation of Multidimensional Arrays
String Abstract Data Type
![Page 3: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/3.jpg)
3
Topics
Abstract Data Types and the C++ Class
Array As Abstract Data Type
Polynomial Abstract Data Type
Sparse Matrices
Representation of Multidimensional Arrays
String Abstract Data Type
![Page 4: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/4.jpg)
C++ Class Represents an ADT Consists of four components
class name data members member functions levels of program access
control the level of access to data members and member functions public : anywhere private : within its class
a function or a class that is a friendprotected : within its class
friend its subclasses
4
![Page 5: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/5.jpg)
Definition of the C++ class Rectangle
5
![Page 6: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/6.jpg)
Data Abstraction and Encapsulation in C++
Data encapsulation of C++ class
all data members are private (or protected)
external access to data members are by member functions
member functions that will be invoked externally are public
all others are private (or protected)
6
![Page 7: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/7.jpg)
Data Abstraction and Encapsulation in C++(cont.)
Separation of specification and implementation of member functions
specification (function prototype) name of functions type of function arguments
type of function result Separation of specification and implementation of member functions
specification (function prototype) name of functionstype of function arguments type of function result
7
![Page 8: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/8.jpg)
Data Abstraction and Encapsulation in C++(cont.)
specification characteristics inside the public portion of the class
implementation-independent description using comments
placed separately in a header file
implementation placed in a source file of the same name
can be included inside its class definition: treated as an inline function
8
![Page 9: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/9.jpg)
Implementation of operations on Rectangle
9
![Page 10: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/10.jpg)
Declaring class objects
in the same way as variables
Invoking member functions
using component selection operators dot(.) : direct selection
arrow : indirect selection through a pointer
10
![Page 11: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/11.jpg)
11
A C++ code fragment demonstrating how Rectangle objects are declared and member functions invoked
![Page 12: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/12.jpg)
Special Class Operations
Constructor a member function which initializes data members of an object If provided for a class, automatically executed when an object of that class is created must be public the name must be identical to the name of the class must not specify a return type or return a value
12
![Page 13: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/13.jpg)
Definition of a constructor for Rectangle
13
![Page 14: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/14.jpg)
Special Class Operations (cont.)
initialize Rectangle object using constructor
Rectangle r(1, 3, 6, 6) ;
Rectangle *s = new Rectangle(0, 0, 3, 4) ;
initialize using a default constructor
Rectangle r ;
14
![Page 15: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/15.jpg)
A default constructor
15
![Page 16: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/16.jpg)
Special Class Operations (cont.)
Destructora member function which deletes data members
automatically invoked when a class object goes out of scope or is deleted
must be public
its class name prefixed with ~
if a data member is a pointer, only the space of the pointer is returned
16
![Page 17: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/17.jpg)
Special Class Operations (cont.)
Operator overloading
polymorphism : same operator is used for different situations
for example, algorithm comparing two floats is different from algorithm comparing two ints
programmer can overload operators for user-defined data types
17
![Page 18: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/18.jpg)
Overloading operator == for class Rectangle
18
![Page 19: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/19.jpg)
Overloading operator << for class Rectangle
19
![Page 20: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/20.jpg)
Special Class Operations (cont.)
this
represents a pointer to the object that invoked a member function
*this represents the object
20
![Page 21: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/21.jpg)
Miscellaneous Topics
Unionreserves storage for the largest of its data membersonly one of its data members can be stored, at any timeresults in a more memory-efficient program
static class data membera global variable for its classthere is only one copy of a static data member and all class objects share itdeclaration does not constitute a definition
21
![Page 22: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/22.jpg)
ADTs and C++ classes
They are similar
Some operators in C++, when overloaded for user defined ADTs, are declared outside the C++ class definition of the ADT
22
![Page 23: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/23.jpg)
Abstract data type Natural Number
23
![Page 24: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/24.jpg)
24
Topics
Abstract Data Types and the C++ Class
Array As Abstract Data Type
Polynomial Abstract Data Type
Sparse Matrices
Representation of Multidimensional Arrays
String Abstract Data Type
![Page 25: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/25.jpg)
Array As Abstract Data TypeArray
a set of pairs <index, value>ADT for array provides operationsretrieves a valuestores a value
C++ Arrayindex starts at 0C++ does not check bounds for an array indexExamplefloat example[n];ith element: example[i] and *(example+i)
25
![Page 26: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/26.jpg)
Abstract data type General Array (1/2)
26
![Page 27: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/27.jpg)
Abstract data type General Array (2/2)(cont.)
27
![Page 28: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/28.jpg)
28
Topics
Abstract Data Types and the C++ Class
Array As Abstract Data Type
Polynomial Abstract Data Type
Sparse Matrices
Representation of Multidimensional Arrays
String Abstract Data Type
![Page 29: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/29.jpg)
Polynomial Abstract Data Type
Ordered (or linear) listdays of the week : (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday)years Switzerland fought in WWII : ()
Operations on lists (a0, a1, ..., an-1) :find the length, n, of the listread the list from left to right (or reverse)retrieve the i-th element, 0≤i<nstore a new value into the i-th position, 0≤i<ninsert a new element at the position i, 0≤i<ndelete the element at position i, 0≤i<n
29
![Page 30: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/30.jpg)
Polynomial Abstract Data Type (cont.)
Polynomial
requires ordered lists
the largest exponent is called degree
sum and product of polynomials
A(x) = ∑aixi and B(x) = ∑bixi
A(x) + B(x) = ∑(ai + bi)xi
A(x) · B(x) = ∑(aixi ·∑(bjxj))
30
![Page 31: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/31.jpg)
Abstract data type Polynomial
31
![Page 32: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/32.jpg)
Polynomial RepresentationPrinciple
unique exponents are arranged in decreasing order
Representation 1define the private data members of Polynomial
private :int degree ; // degree≤MaxDegreefloat coef[MaxDegree+1] ;
for Polynomial object a, n≤MaxDegreea.degree=na.coef[i]=an-i, 0≤i≤n
a.coef[i] is the coefficient of xn-i
A(x)=anxn+an-1x
n-i+...+a1x+a0
leads to a very simple algorithms for many of the operations on polynomialswastes computer memory
for example, if a.degree≪MaxDegree
32
![Page 33: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/33.jpg)
Polynomial Representation (cont.)
Representation 2define coef with size a.degree+1declare private data members
private :int degree ;float *coef ;
add a constructor to PolynomialPolynomial::Polynomial(int d){
degree=d ;coef=new float[degree+1] ;
wastes space for sparse polynomialsfor example, x1000+1
33
![Page 34: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/34.jpg)
Polynomial Representation (cont.)
Representation 3previously, exponents are represented by array indicesnow, (non-zero) exponents are storedall Polynomials will be represented in a single array called termArray
termArray is shared by all Polynomial objectsit is declared as staticeach element in termArray is of type term
Class Term {friend Polynomial ;private :
float coef ; // coefficientint exp ; // exponent
} ;
Class Polynomial {Private:Term *termArray; //size of nonzero termsint capacity; //size of termArrayint terms; //number of nonzero terms}
34
![Page 35: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/35.jpg)
Adding two polynomials (1/2)
35
![Page 36: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/36.jpg)
Adding two polynomials (2/2) (cont.)
36
![Page 37: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/37.jpg)
Adding a new term
37
![Page 38: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/38.jpg)
Polynomial Addition (cont.)Analysis of Add
m and n are number of nonzero-terms in A and B, respectivelythe while loop of line 5 is bounded by m+n-1the for loops of lines 20 and 23 are bounded by O(n+m)summing up, the asymptotic computing time is O(n+m)
Disadvantages of representing polynomials by arrays
space must be reused for unused polynomialslinked lists in chapter 4 provide a solution
38
![Page 39: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/39.jpg)
39
Topics
Abstract Data Types and the C++ Class
Array As Abstract Data Type
Polynomial Abstract Data Type
Sparse Matrices
Representation of Multidimensional Arrays
String Abstract Data Type
![Page 40: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/40.jpg)
IntroductionMatrix with m rows and n columns
m×n (m by n)mn elementswhen m=n, the matrix is square
Storing a matrixtwo dimensional array A[m][n]
an element is A[i][j]
sparse matrixstore only the nonzero elements
Matrix operationscreationtranspositionadditionmultiplication
40
![Page 41: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/41.jpg)
Two matrices
41
![Page 42: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/42.jpg)
Abstract data type SparseMatrix (1/2)
42
![Page 43: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/43.jpg)
Abstract data type SparseMatrix (2/2)(cont.)
43
![Page 44: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/44.jpg)
Sparse Matrix Representation
Representation
use the triple <row, col, value> to represent an element
store the triples by rows
for each row, the column indices are in ascending order
store the number of rows, columns, and nonzero elements
44
![Page 45: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/45.jpg)
Sparse Matrix Representation (cont.)
C++ codeclass SparseMatrix; // forward declarationclass MatrixTerm {friend class SparseMatrixprivate:
int row, col, value;};
in class SparseMatrixprivate:
int Rows, Cols, Terms;MatrixTerm smArray[MaxTerms];
45
![Page 46: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/46.jpg)
Sparse matrix and its transpose stored as triples
46
![Page 47: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/47.jpg)
Transposing a MatrixAn element at [i][j] will be at [j][i] for (each row i)
take element (i, j, value) and store it in (j, i, value) of the transpose;example
(0, 0, 15) → (0, 0, 15) (0, 3, 22) → (3, 0, 22) (0, 5, -15) → (5, 0, -15) (1, 1, 11) → (1, 1, 11)
need to insert many new triples, elements are moved down very often
Find the elements in the order for (all elements in column j)
place element (i, j, value) in position (j, i, value);
47
![Page 48: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/48.jpg)
Transposing a matrix
48
![Page 49: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/49.jpg)
Transposing a Matrix (cont.)Analysis of transpose
the number of iterations of the for loop at line 9 is termsthe number of iterations of the for loop at line 8 is columnstotal time is O(terms·columns)total space is O(space for a and b)
Using two-dimensional arraysfor(int j=0; j<columns; j++)
for(int i=0; i<rows; i++)B[j][i]=A[i][j];
total time is O(rows·columns)
ComparisonO(terms·columns) = O(rows·columns2)>O(rows·columns)space-time trade-off
49
![Page 50: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/50.jpg)
Transposing a Matrix (cont.)
FastTranspose algorithm
determine the number of elements in each column of a→the number of elements in each row of b
→starting point of each of b's rows
move elements of a one by one into their correct position in b
50
![Page 51: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/51.jpg)
Transposing a Matrix (cont.)
values for Figure matrix
asymptotic complexitythere are four unnested for loops
O(columns+terms)
if terms → rows·columns, O(rows·columns)
if terms << rows·columns, less than O(rows·columns)
requires space for RowSize and RowStart
51
![Page 52: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/52.jpg)
Transposing a matrix faster (1/2)
52
![Page 53: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/53.jpg)
Transposing a matrix faster (2/2) (cont.)
53
![Page 54: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/54.jpg)
Matrix Multiplication
Definition : Given a and b, where a is m×n and b is n×p, the product matrix d has dimension m×p.
for 0<=i<m and 0<=j<p.
54
![Page 55: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/55.jpg)
Change the size of a 1-dimensional array
55
![Page 56: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/56.jpg)
Storing a matrix term
56
![Page 57: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/57.jpg)
Matrix Multiplication (cont.)
currRowA : currently being multiplied with the columns of b
currRowBegin : position in a of the first element of currRowA
currColB : currently being multiplied with currRowA
currRowIndex, currColIndex : examine successive elements of currRowA, currColB 57
![Page 58: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/58.jpg)
Multiplying sparse matrices (1/3)
58
![Page 59: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/59.jpg)
Multiplying sparse matrices(2/3) (cont.)
59
![Page 60: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/60.jpg)
Multiplying sparse matrices (3/3) (cont.)
60
![Page 61: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/61.jpg)
Analysis of Multiply
Line 3-13 : O(b.cols+b.terms)
Line 14-56 : O(a.rows)
Line 19-50 : O(b.cols+b.cols*tr+b.terms.)
tr=number of terms in row r of a
Line 51-53 : O(tr)
Line 14-56 : O(b.cols*tr+b.terms)
Overall time for this loop : O(∑r(b.cols*tr+b.terms))=O(b.cols*a.terms+a.rows*b.terms)
61
![Page 62: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/62.jpg)
Analysis of Multiply (cont.)
Arrays are used.
for (int i=0; i<a.rows; i++)
for (int j=0; j<b.cols; j++){
sum=0;
for (int k=0; k<a.cols; k++)
sum+=a[i][l]*b[k][j];
c[i][j]=sum;
Time for this : O(a.rows*a.cols*b.cols)
62
![Page 63: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/63.jpg)
63
Topics
Abstract Data Types and the C++ Class
Array As Abstract Data Type
Polynomial Abstract Data Type
Sparse Matrices
Representation of Multidimensional Arrays
String Abstract Data Type
![Page 64: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/64.jpg)
Representation of Multidimensional Arrays
A[p1 ... q1][p2 ... q2] ... [pn ... qn], Where pi ... qi is the range of index values in dimension i
the number of elements : (qi-pi+1)
an element A[i1][i2] ... [in] is mapped onto a position in a one-dim C++ array
64
![Page 65: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/65.jpg)
Representation of Multidimensional Arrays (cont.)
Row major order exampleA[4..5][2..4][1..2][3..4]2*3*2*2 = 24 elementsstored as A[4][2][1][3], A[4][2][1][4], ..., A[5][4][2][3], A[5][4][2][4]indices are increasing : lexicographic ordertranslate to locations in the one-dim array
A[4][2][1][3] → position 0A[4][2][1][4] → position 1A[5][4][2][4] → position 23
65
![Page 66: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/66.jpg)
Representation of Multidimensional Arrays (cont.)
Translation for an n-dim array
assume pi=0 and qi=ui-1
one-dim array A[u1]
66
![Page 67: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/67.jpg)
Representation of Multidimensional Arrays (cont.)
two-dim array A[u1][u2]
let α be the address of A[0][0]
A[i][0] : α+i*u2
A[i][j] : α+i*u2+j
67
![Page 68: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/68.jpg)
Representation of Multidimensional Arrays (cont.)
three-dim array A[u1][u2][u3]
the address of A[0][0][0] : α
A[i][0][0] : α+iu2u3
A[i][j][k] : α+iu2u3+ju3+k
68
![Page 69: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/69.jpg)
Representation of Multidimensional Arrays (cont.)
69
![Page 70: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/70.jpg)
70
Topics
Abstract Data Types and the C++ Class
Array As Abstract Data Type
Polynomial Abstract Data Type
Sparse Matrices
Representation of Multidimensional Arrays
String Abstract Data Type
![Page 71: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/71.jpg)
String Abstract Data TypeString ADT
S=s0, ..., sn-1where si are characters and n is the length of the string
if n=0, S is an empty or null string
operations for strings
C++ stringstring literal constants (e.g., "abc")array of chars : string characters + null characterassigned to variables of type char* (e.g., char* str="abc";)ith character of str : str[i]
71
![Page 72: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/72.jpg)
Abstract data type String (1/2)
72
![Page 73: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/73.jpg)
Abstract data type String (2/2) (cont.)
73
![Page 74: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/74.jpg)
String Pattern MatchingFunction Find
two strings s and pat : pat is searched for in sinvocation : s.Find(pat)return i : pat matches s beginning at position ireturn -1 : pat is empty or is not a substring of s
Implementationrepresentation of strings
privatechar* str
sequentially consider each position of s positions to the right of position LengthS-LengthPneed not be considered
74
![Page 75: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/75.jpg)
Exhaustive pattern matching
75
![Page 76: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/76.jpg)
String Pattern Matching (cont.)
the complexity is O(LengthP·LengthS)
the number of execution of while loop to check *p==*s ≤ LengthP
the number of execution of while loop by incrementing i < LengthS
76
![Page 77: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/77.jpg)
String pattern Matching : The Knuth-Morris-Pratt Algorithm
We would like an algorithm that works in O(lengthP+lengthS) time.
Knuth, Morris, and Pratt have developed a pattern matching algorithm that has linear complexity.
77
![Page 78: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/78.jpg)
String pattern Matching : The Knuth-Morris-Pratt Algorithm (cont.)
Definition : If p=p0p1……pn-1 is a pattern, then its failure function, f, is defined as
78
![Page 79: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/79.jpg)
String pattern Matching : The Knuth-Morris-Pratt Algorithm (cont.)
79
j 0 1 2 3 4 5 6 7 8 9
Pat a b c a b c a c a b
f -1 -1 -1 0 1 2 3 -1 0 1
![Page 80: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/80.jpg)
String pattern Matching : The Knuth-Morris-Pratt Algorithm (cont.)
80
j 0 1 2 3 4 5 6 7 8 9
Pat a b c a b c a c a b
f -1 -1 -1 0 1 2 3 -1 0 1
If a partial match is found such that si-j…si-1 = p0…pj-1 and si≠pj then matching may be resumed by comparing si and pf(j-1)+1 if j≠0.
If j=0, then we may continue by comparing si+1 and p0
![Page 81: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/81.jpg)
Pattern-matching with a failure function
81
![Page 82: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/82.jpg)
String pattern Matching : The Knuth-Morris-Pratt Algorithm (cont.)
We can compute the failure function in O(lengthP) time, then the entire pattern-matching process will have a computing time proportional to the sum of the lengths of the string and pattern.
(Note that f1(j)=f(j) and fm (j)=f(fm -1(j))).
82
![Page 83: Arrays - Seoul National Universityocw.snu.ac.kr/sites/default/files/NOTE/5413.pdf · 2018-01-30 · C++ Class Represents an ADT Consists of four components class name data members](https://reader034.vdocument.in/reader034/viewer/2022050715/5f11a893774cd617e21df5dc/html5/thumbnails/83.jpg)
Computing the failure function
83