1

 Introduction
 Proof By Induction
 Asymptotic notation

2

 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

3

 Instructor: David Luebke
 luebke@cs.virginia.edu
 Office: Olsson 219
 Office hours: 23 Monday, 1011 Thursday
 TA: Pavel Sorokin
 Office hours and location TBA

4

 Grading policy:
 Homework: 30%
 Exam 1: 15%
 Exam 2: 15%
 Final: 35%
 Participation: 5%

5

 Prerequisites:
 CS 202 w/ grade of C or better
 CS 216 w/ grade of C or better
 CS 302 recommended but not required
 Who has not taken CS 302?

6

 Format
 Three lectures/week
 Homework most weeks
 Problem sets
 Maybe occasional programming assignments
 Two tests + final exam

7

 Suppose
 S(k) is true for fixed constant k
 S(n) à
S(n+1) for all n >= k
 Then S(n) is true for all n >= k

8

 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

9

 Prove 1 + 2 + 3 + … + n = n(n+1) / 2
 Basis:
 If n = 0, then 0 = 0(0+1) / 2
 Inductive hypothesis:
 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

10

 Prove a^{0} + a^{1} + … + a^{n} = (a^{n+1}
 1)/(a  1) for all a ¹ 1
 Basis: show that a^{0} = (a^{0+1}  1)/(a  1)
 a^{0} = 1 = (a^{1}  1)/(a  1)
 Inductive hypothesis:
 Assume a^{0} + a^{1} + … + a^{n} = (a^{n+1}
 1)/(a  1)
 Step (show true for n+1):
 a^{0} + a^{1} + … + a^{n+1} = a^{0} +
a^{1} + … + a^{n} + a^{n+1}
 = (a^{n+1}  1)/(a  1) + a^{n+1} = (a^{n+1+1}
 1)/(a  1)

11

 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

12

 In this course, we care most about asymptotic performance
 How does the algorithm behave as the problem size gets very large?
 Running time
 Memory/storage requirements
 Bandwidth/power requirements/logic gates/etc.

13

 By now you should have an intuitive feel for asymptotic (bigO)
notation:
 What does O(n) running time mean?
O(n^{2})?
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

14

 Analysis is performed with respect to a computational model
 We will usually use a generic uniprocessor randomaccess machine (RAM)
 All memory equally expensive to access
 No concurrent operations
 All reasonable instructions take unit time
 Except, of course, function calls
 Constant word size
 Unless we are explicitly manipulating bits

15

 Time and space complexity
 This is generally a function of the input size
 E.g., sorting, multiplication
 How we characterize input size depends:
 Sorting: number of input items
 Multiplication: total number of bits
 Graph algorithms: number of nodes & edges
 Etc

16

 Number of primitive steps that are executed
 Except for time of executing a function call most statements roughly
require the same amount of time
 y = m * x + b
 c = 5 / 9 * (t  32 )
 z = f(x) + g(y)
 We can be more exact if need be

17

 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”?
 Random (equally likely) inputs
 Reallife inputs

18

