Data Structures Using C++ 2E
Chapter 1
Software Engineering Principles and C+
+ Classes
Algorithm Analysis: The Big-O Notation
• Analyze algorithm after design
• Example
– 50 packages delivered to 50 different houses
– 50 houses one mile apart, in the same area
FIGURE 1-1 Gift shop and each dot representing a house
Data Structures Using C++ 2E 2
Algorithm Analysis: The Big-O Notation
(cont’d.)
• Example (cont’d.)
– Driver picks up all 50 packages
– Drives one mile to first house, delivers first package
– Drives another mile, delivers second package
– Drives another mile, delivers third package, and so on
– Distance driven to deliver packages
• 1+1+1+… +1 = 50 miles
– Total distance traveled: 50 + 50 = 100 miles
FIGURE 1-2 Package delivering scheme
Data Structures Using C++ 2E 3
Algorithm Analysis: The Big-O Notation
(cont’d.)
• Example (cont’d.)
– Similar route to deliver another set of 50 packages
• Driver picks up first package, drives one mile to the first
house, delivers package, returns to the shop
• Driver picks up second package, drives two miles,
delivers second package, returns to the shop
– Total distance traveled
• 2 * (1+2+3+…+50) = 2550 miles
FIGURE 1-3 Another package delivery scheme
Data Structures Using C++ 2E 4
Algorithm Analysis: The Big-O Notation
(cont’d.)
• Example (cont’d.)
– n packages to deliver to n houses, each one mile
apart
– First scheme: total distance traveled
• 1+1+1+… +n = 2n miles
• Function of n
– Second scheme: total distance traveled
• 2 * (1+2+3+…+n) = 2*(n(n+1) / 2) = n2+n
• Function of n2
Data Structures Using C++ 2E 5
Algorithm Analysis: The Big-O Notation
(cont’d.)
• Analyzing an algorithm
– Count number of operations performed
• Not affected by computer speed
TABLE 1-1 Various values of n, 2n, n2, and n2 + n
Data Structures Using C++ 2E 6
Algorithm Analysis: The Big-O Notation
(cont’d.)
• Example 1-1
– Illustrates fixed number of executed operations
Data Structures Using C++ 2E 7
Algorithm Analysis: The Big-O Notation
(cont’d.)
• Example 1-2
– Illustrates dominant operations
Data Structures Using C++ 2E 8
Algorithm Analysis: The Big-O Notation
(cont’d.)
• Search algorithm
– n: represents list size
– f(n): count function
• Number of comparisons in search algorithm
– c: units of computer time to execute one operation
– cf(n): computer time to execute f(n) operations
– Constant c depends computer speed (varies)
– f(n): number of basic operations (constant)
– Determine algorithm efficiency
• Knowing how function f(n) grows as problem size grows
Data Structures Using C++ 2E 9
Algorithm Analysis: The Big-O Notation
(cont’d.)
TABLE 1-2 Growth rates of various functions
Data Structures Using C++ 2E 10
Algorithm Analysis: The Big-O Notation
(cont’d.)
TABLE 1-3 Time for f(n) instructions
on a computer that executes 1 billion
instructions per second
Figure 1-4 Growth rate
of functions in Table 1-3
Data Structures Using C++ 2E 11
Algorithm Analysis: The Big-O Notation
(cont’d.)
• Notation useful in describing algorithm behavior
– Shows how a function f(n) grows as n increases
without bound
• Asymptotic
– Study of the function f as n becomes larger and larger
without bound
– Examples of functions
• g(n)=n2 (no linear term)
• f(n)=n2 + 4n + 20
Data Structures Using C++ 2E 12
Algorithm Analysis: The Big-O Notation
(cont’d.)
• As n becomes larger and larger
– Term 4n + 20 in f(n) becomes insignificant
– Term n2 becomes dominant term
TABLE 1-4 Growth rate of n2 and n2 + 4n + 20n
Data Structures Using C++ 2E 13
Algorithm Analysis: The Big-O Notation
(cont’d.)
• Algorithm analysis
– If function complexity can be described by complexity
of a quadratic function without the linear term
• We say the function is of O(n2) or Big-O of n2
• Let f and g be real-valued functions
– Assume f and g nonnegative
• For all real numbers n, f(n) >= 0 and g(n) >= 0
• f(n) is Big-O of g(n): written f(n) = O(g(n))
– If there exists positive constants c and n0 such that
f(n) <= cg(n) for all n >= n0
Data Structures Using C++ 2E 14
Algorithm Analysis: The Big-O Notation
(cont’d.)
TABLE 1-5 Some Big-O functions that appear in algorithm analysis
Data Structures Using C++ 2E 15
Data Structures Using C++ 2E
Chapter 2
Object-Oriented Design (OOD) and C++
Objectives
• Learn about inheritance
• Learn about derived and base classes
• Explore how to redefine the member functions of a
base class
• Examine how the constructors of base and derived
classes work
• Learn how to construct the header file of a derived
class
Data Structures Using C++ 2E 17
Objectives (cont’d.)
• Explore three types of inheritance: public,
protected, and private
• Learn about composition
• Become familiar with the three basic principles of
object-oriented design
• Learn about overloading
• Become aware of the restrictions on operator
overloading
Data Structures Using C++ 2E 18
Objectives (cont’d.)
• Examine the pointer this
• Learn about friend functions
• Explore the members and nonmembers of a class
• Discover how to overload various operators
• Learn about templates
• Explore how to construct function templates and
class templates
Data Structures Using C++ 2E 19