CS 332: Algorithms
Introduction
Proof By Induction
Asymptotic notation
David Luebke 1 2023-01-02
The Course
• Purpose: a rigorous introduction to the design
and analysis of algorithms
▪ Not a lab or programming course
▪ Not a math course, either
• Textbook: Introduction to Algorithms,
Cormen, Leiserson, Rivest, Stein
▪ The “Big White Book”
▪ Second edition: now “Smaller Green Book”
▪ An excellent reference you should own
David Luebke 2 2023-01-02
The Course
• Instructor: David Luebke
▪
[email protected] ▪ Office: Olsson 219
▪ Office hours: 2-3 Monday, 10-11 Thursday
• TA: Pavel Sorokin
▪ Office hours and location TBA
David Luebke 3 2023-01-02
The Course
• Grading policy:
▪ Homework: 30%
▪ Exam 1: 15%
▪ Exam 2: 15%
▪ Final: 35%
▪ Participation: 5%
David Luebke 4 2023-01-02
The Course
• Prerequisites:
▪ CS 202 w/ grade of C- or better
▪ CS 216 w/ grade of C- or better
▪ CS 302 recommended but not required
o Who has not taken CS 302?
David Luebke 5 2023-01-02
The Course
• Format
▪ Three lectures/week
▪ Homework most weeks
o Problem sets
o Maybe occasional programming assignments
▪ Two tests + final exam
David Luebke 6 2023-01-02
Review: Induction
• Suppose
▪ S(k) is true for fixed constant k
o Often k = 0
▪ S(n) =S(n+1) for all n >= k
• Then S(n) is true for all n >= k
David Luebke 7 2023-01-02
Proof By Induction
• Claim:S(n) is true for all n >= k
• Basis:
▪ Show formula is true when n = k
• Inductive hypothesis:
▪ Assume formula is true for an arbitrary n
• Step:
▪ Show that formula is then true for n+1
David Luebke 8 2023-01-02
Induction Example:
Gaussian Closed Form
• Prove 1 + 2 + 3 + … + n = n(n+1) / 2
▪ Basis:
o If n = 0, then 0 = 0(0+1) / 2
▪ Inductive hypothesis:
o Assume 1 + 2 + 3 + … + n = n(n+1) / 2
▪ Step (show true for n+1):
1 + 2 + … + n + n+1 = (1 + 2 + …+ n) + (n+1)
= n(n+1)/2 + n+1 = [n(n+1) + 2(n+1)]/2
= (n+1)(n+2)/2 = (n+1)(n+1 + 1) / 2
David Luebke 9 2023-01-02
Induction Example:
Geometric Closed Form
• Prove a0 + a1 + … + an = (an+1 - 1)/(a - 1) for
all a 1
▪ Basis: show that a0 = (a0+1 - 1)/(a - 1)
a0 = 1 = (a1 - 1)/(a - 1)
▪ Inductive hypothesis:
o Assume a0 + a1 + … + an = (an+1 - 1)/(a - 1)
▪ Step (show true for n+1):
a0 + a1 + … + an+1 = a0 + a1 + … + an + an+1
= (an+1 - 1)/(a - 1) + an+1 = (an+1+1 - 1)/(a - 1)
David Luebke 10 2023-01-02
Induction
• We’ve been using weak induction
• Strong induction also holds
▪ Basis: show S(0)
▪ Hypothesis: assume S(k) holds for arbitrary k <= n
▪ Step: Show S(n+1) follows
• Another variation:
▪ Basis: show S(0), S(1)
▪ Hypothesis: assume S(n) and S(n+1) are true
▪ Step: show S(n+2) follows
David Luebke 11 2023-01-02
Asymptotic Performance
• In this course, we care most about asymptotic
performance
▪ How does the algorithm behave as the problem
size gets very large?
o Running time
o Memory/storage requirements
o Bandwidth/power requirements/logic gates/etc.
David Luebke 12 2023-01-02
Asymptotic Notation
• By now you should have an intuitive feel for
asymptotic (big-O) notation:
▪ What does O(n) running time mean? O(n2)?
O(n lg n)?
▪ How does asymptotic running time relate to
asymptotic memory usage?
• Our first task is to define this notation more
formally and completely
David Luebke 13 2023-01-02
Analysis of Algorithms
• Analysis is performed with respect to a
computational model
• We will usually use a generic uniprocessor
random-access machine (RAM)
▪ All memory equally expensive to access
▪ No concurrent operations
▪ All reasonable instructions take unit time
o Except, of course, function calls
▪ Constant word size
o Unless we are explicitly manipulating bits
David Luebke 14 2023-01-02
Input Size
• Time and space complexity
▪ This is generally a function of the input size
o E.g., sorting, multiplication
▪ How we characterize input size depends:
o Sorting: number of input items
o Multiplication: total number of bits
o Graph algorithms: number of nodes & edges
o Etc
David Luebke 15 2023-01-02
Running Time
• Number of primitive steps that are executed
▪ Except for time of executing a function call most
statements roughly require the same amount of
time
oy=m*x+b
o c = 5 / 9 * (t - 32 )
o z = f(x) + g(y)
• We can be more exact if need be
David Luebke 16 2023-01-02
Analysis
• Worst case
▪ Provides an upper bound on running time
▪ An absolute guarantee
• Average case
▪ Provides the expected running time
▪ Very useful, but treat with care: what is “average”?
o Random (equally likely) inputs
o Real-life inputs
David Luebke 17 2023-01-02
The End
David Luebke 18 2023-01-02