Running Time ( 1.1) : W W W W
Running Time ( 1.1) : W W W W
1)
w Most algorithms transform
best case average case worst case
120 100
Analysis of Algorithms
Input
Algorithm
Output
input objects into output objects. w The running time of an algorithm typically grows with the input size. w Average case time is often difficult to determine. w We focus on the worst case running time.
n n
Running Time
80 60 40 20 0
1000
2000
3000
4000
Input Size
Limitations of Experiments
w It is necessary to implement the
algorithm, which may be difficult
implementing the algorithm w Run the program with inputs of varying size and composition w Use a method like System.currentTimeMillis() to get an accurate measure of the actual running time w Plot the results
Time (ms)
running time on other inputs not included in the experiment. w In order to compare two algorithms, the same hardware and software environments must be used
Input Size
3 Analysis of Algorithms 4
Analysis of Algorithms
Theoretical Analysis
w Uses a high-level description of the
algorithm instead of an implementation w Characterizes running time as a function of the input size, n. w Takes into account all possible inputs w Allows us to evaluate the speed of an algorithm independent of the hardware/software environment
Analysis of Algorithms 5
Pseudocode (1.1)
w High-level description w w w w
Example: find max element of an array of an algorithm More structured than Algorithm arrayMax(A, n) English prose Input array A of n integers Less detailed than a Output maximum element of A program currentMax A[0] Preferred notation for for i 1 to n 1 do describing algorithms if A[i] > currentMax then Hides program design currentMax A[i] issues return currentMax
Analysis of Algorithms 6
Pseudocode Details
w Control flow
n n n n n
w Method call
var.method (arg [, arg])
w Return value
return expression
w Expressions
Assignment (like = in Java) = Equality testing (like == in Java) n 2 Superscripts and other mathematical formatting allowed
7
w Method declaration
Algorithm method (arg [, arg]) Input Output
bank of memory cells, each of which can hold an arbitrary number or character
Analysis of Algorithms
Primitive Operations
w Basic computations w w w w
performed by an algorithm Identifiable in pseudocode Largely independent from the programming language Exact definition not important (we will see why later) Assumed to take a constant amount of time in the RAM model
Analysis of Algorithms
w Examples:
n
n n
Evaluating an expression Assigning a value to a variable Indexing into an array Calling a method Returning from a method
maximum number of primitive operations executed by an algorithm, as a function of the input size Algorithm arrayMax(A, n) currentMax A[0] for i 1 to n 1 do if A[i] > currentMax then currentMax A[i] { increment counter i } return currentMax # operations 2 2 +n 2(n 1) 2(n 1) 2(n 1) 1 Total 7n 1
10
Analysis of Algorithms
Affects T(n) by a constant factor, but Does not alter the growth rate of T(n)
Analysis of Algorithms
11
12
Growth Rates
w Growth rates of
functions:
n n n
Constant Factors
1E+30 1E+28 1E+26 1E+24 1E+22 1E+20 1E+18 1E+16 1E+14 1E+12 1E+10 1E+8 1E+6 1E+4 1E+2 1E+0 1E+0 Cubic Quadratic Linear
T (n )
w Examples
n n
w In a log-log chart,
the slope of the line corresponds to the growth rate of the function
T ( n)
1E+26 1E+24 1E+22 1E+20 1E+18 1E+16 1E+14 1E+12 1E+10 1E+8 1E+6 1E+4 1E+2 1E+0 1E+0
1E+2
1E+4 n
1E+6
1E+8
1E+10
1E+2
1E+4
1E+6
1E+8
1E+10
n
Analysis of Algorithms 13 Analysis of Algorithms
14
Big-Oh Example
1,000,000
g(n), we say that f(n) is 1,000 O(g(n)) if there are positive constants 100 c and n0 such that
10
is not O(n)
1 1 10 100 1,000
1 1 10 100 1,000
n
15 Analysis of Algorithms 16
Analysis of Algorithms
7n-2
7n-2 is O(n) need c > 0 and n 0 1 such that 7n-2 cn for n n 0 this is true for c = 7 and n 0 = 1
n 3n 3
+ 20n2 + 5
3n 3 + 20n2 + 5 is O(n3 ) need c > 0 and n 0 1 such that 3n3 + 20n 2 + 5 cn3 for n n 0 this is true for c = 4 and n 0 = 21
n3
3 log n + log log n is O(log n) need c > 0 and n 0 1 such that 3 log n + log log n clog n for n n 0 this is true for c = 4 and n 0 = 2
Analysis of Algorithms 17
Big-Oh Rules
w If is f(n) a polynomial of degree d, then f(n) is
O(n d), i.e.,
n n
Drop lower-order terms Drop constant factors Say 2n is O(n) instead of 2n is O(n2 )
We find the worst-case number of primitive operations executed as a function of the input size We express this function with big-Oh notation We determine that algorithm arrayMax executes at most 7n 1 primitive operations We say that algorithm arrayMax runs in O(n) time
w Example:
n n
eventually dropped anyhow, we can disregard them when counting primitive operations
Analysis of Algorithms 20
X A
21
Arithmetic Progression
w The running time of
7 6 5 4 3 2 1 0 1 2 3 4 5 6
23
#operations
w Thus, algorithm
n 1 n n n 1
24
Analysis of Algorithms
Relatives of Big-Oh
w big-Omega
f(n) is (g(n)) if there is a constant c > 0 and an integer constant n0 1 such that f(n) cg(n) for n n0 w big-Theta n f(n) is (g(n)) if there are constants c > 0 and c > 0 and an integer constant n 0 1 such that cg(n) f(n) cg(n) for n n0 w little-oh n f(n) is o(g(n)) if, for any constant c > 0, there is an integer constant n 0 0 such that f(n) cg(n) for n n 0 w little-omega n f(n) is (g(n)) if, for any constant c > 0, there is an integer constant n 0 0 such that f(n) cg(n) for n n 0
n
w w
Analysis of Algorithms
26
5n 2 is (n2 ) f(n) is (g(n)) if there is a constant c > 0 and an integer constant n 0 1 such that f(n) cg(n) for n n0 let c = 5 and n0 = 1 5n 2 is (n) f(n) is (g(n)) if there is a constant c > 0 and an integer constant n 0 1 such that f(n) cg(n) for n n0 let c = 1 and n0 = 1 2 is (n) 5n f(n) is (g(n)) if, for any constant c > 0, there is an integer constant n0 0 such that f(n) cg(n) for n n0 need 5n02 cn0 given c, the n0 that satifies this is n0 c/5 0
Analysis of Algorithms 28
Analysis of Algorithms
27