Transcript Lec-03x
CS 253: Algorithms
Chapter 3
Growth of Functions
Credit
: Dr. George Bebis
Analysis of Algorithms
Goal
: To analyze and compare algorithms in terms of
requirements
(i.e.
time
and
space complexity
)
running time
and
memory
In other words, how does the running time and space requirements change as we increase the input size n ?
(sometimes we are also interested in the coding complexity)
Input size
(number of elements in the input) ◦ size of an
array
or a
matrix
◦ # of bits in the binary representation of the input ◦ vertices and/or edges in a graph, etc.
2
Types of Analysis
Worst case ◦ ◦ Provides an upper bound on running time An absolute guarantee that the algorithm would not run longer, no matter what the inputs are Best case ◦ ◦ Provides a lower bound on running time Input is the one for which the algorithm runs the fastest Average case ◦ ◦ Provides a prediction about the running time Assumes that the input is random
Lower Bound ≤ Running Time ≤ Upper Bound
3
Computing the Running Time
Measure the execution time ? Not a good idea ! It varies for different microprocessors!
Count the number of statements executed?
Yes, but you need to be very careful!
High-level programming languages have statements which require a large number of low-level machine language instructions to execute (a function of the input size n). For example, a subroutine call can not be counted as one statement; it needs to be analyzed separately Associate a "cost" with each statement.
Find the "total cost“ by multiplying the cost with the total number of times each statement is executed.
(we have seen examples before) 4
Example
Algorithm X
Cost
sum = 0; c 1 for(i=0; i Total Cost = c 1 + c 2 * (N+1) + c 3 * N * (N+1) + c 4 * N 2 5 To compare two algorithms with running times f(n) a rough measure that characterizes and g(n), we need how fast each function grows with respect to n In other words, we are interested in how they behave asymptotically (i.e. for large n ) (called rate of growth ) Big O notation: asymptotic “less than” or “at most”: f(n)=O(g(n)) implies: f(n) “≤” g(n) notation: asymptotic “greater than” or “at least”: f(n)= (g(n)) implies: f(n) “≥” g(n) notation: asymptotic “equality” or “exactly”: f(n)= (g(n)) implies: f(n) “=” g(n) 6 We say f A (n) = 7n+18 is order n, or O (n) It is, at most, roughly proportional to n. f B (n) = 3n 2 +5n +4 is order n 2 , or O(n 2 ). It is, at most, roughly proportional to n 2 . In general, any O(n 2 ) function is faster growing than any O(n) function. f B (n) f A (n) 7 Increasing n n 4 + 100n 2 10n 3 + 2n 2 + 10n + 50 O(n 3 ) n 3 - n 2 O(n 3 ) O(n 4 ) constants 10 is O(1) 1273 is O(1) what is the rate of growth for Algorithm X Big O notation)? studied earlier (in Total Time = c 1 + c 2 *(N+1) + c 2 * N*(N+1) + c 3 *N 2 If c 1 , c 2 , c 3 , and c 4 are constants then Total Time = O(N 2 ) 8 O-notation Note that 30n+8 is O(n). Can you find a c and n 0 which can be used in the formal definition of Big O ? cn =31 n 30 n +8 You can easily see that 30n+8 isn ’ t less than n anywhere (n>0). n But it is less than 31n everywhere to the right of n=8. So, one possible ( that can be used in the formal definition: c , n 0 ) pair c = 31, n 0 = 8 n 0 =8 n 30 n +8 O( n ) O(g(n)) is the set of functions with smaller or same order of growth as g(n) 11 There is no unique set of values for n 0 and c in proving the asymptotic bounds Prove that 100n + 5 = O(n 2 ) (i) 100n + 5 ≤ 100n + n = 101n ≤ 101n 2 for all n ≥ 5 You may pick n 0 = 5 and c = 101 to complete the proof. (ii) 100n + 5 ≤ 100n + 5n = 105n ≤ 105n 2 for all n ≥ 1 You may pick n 0 = 1 and c = 105 to complete the proof. 12 (g(n)) is the set of functions with larger or same order of growth as g(n) ◦ 5n 2 = (n) c, n 0 such that: 0 cn 5n 2 cn 5n 2 c = 1 and n > n 0 =1 ◦ 100n + 5 ≠ (n 2 ) c, n 0 such that: 0 cn 2 100n + 5 since 100n + 5 100n + 5n n 1 cn 2 105n n(cn – 105) 0 Since n is positive (cn – 105) 0 n 105/c contradiction: n cannot be smaller than a constant ◦ n = (2n), n 3 = (n 2 ), n = (logn) 15 (g(n)) is the set of functions with the same order of growth as g(n) ◦ n 2 /2 –n/2 = (n 2 ) ½ n 2 - ½ n ≤ ½ n 2 ¼ n 2 ≤ ½ n 2 - ½ n n ≥ 0 c 2 = ½ n ≥ 2 c 1 = ¼ ◦ n ≠ (n 2 ): c 1 n 2 ≤ n ≤ c 2 n 2 only holds for: n ≤ 1/ c 1 ◦ 6n 3 ≠ (n 2 ): c 1 n 2 ≤ 6n 3 ≤ c 2 n 2 only holds for: n ≤ c 2 /6 ◦ n ≠ (logn): c 1 logn ≤ n ≤ c 2 logn c 2 ≥ n/logn, n≥ n 0 – impossible Subset relations between order-of-growth sets. O( f ) R R ( f ) • f ( f ) 17 18 19 In algorithm analysis we often use the notation “ log n ” without specifying the base Binary logarithm Natural logarithm lg ln n n log 2 log e n n k n n n k n x y y x xy x y log x y log x log y a log b x x log b a b x a x a b For each of the following pairs of functions, either f(n) is O(g(n)), f(n) is Ω(g(n)), or f(n) = Θ (g(n)). Determine which relationship is correct. ◦ ◦ f(n) = log n 2 ; g(n) = log n + 5 f(n) = n; g(n) = log n 2 ◦ ◦ f(n) = log log n; g(n) = log n f(n) = n; g(n) = log 2 n ◦ ◦ f(n) = n log n + n; g(n) = log n f(n) = 10; g(n) = log 10 ◦ f(n) = 2 n ; g(n) = 10n 2 ◦ f(n) = 2 n ; g(n) = 3 n f(n) = (g(n)) f(n) = (g(n)) f(n) = O(g(n)) f(n) = (g(n)) f(n) = (g(n)) f(n) = (g(n)) f(n) = (g(n)) f(n) = O(g(n)) : f(n) = (g(n)) f = O(g(n)) and f = (g(n)) Transitivity: ◦ ◦ f(n) = (g(n)) Same for O and and ◦ ◦ Reflexivity: f(n) = (f(n)) Same for O and g(n) = (h(n)) f(n) = ◦ Symmetry: f(n) = (g(n)) if and only if g(n) = (f(n)) (h(n)) Transpose symmetry: ◦ f(n) = O(g(n)) if and only if g(n) = (f(n)) 22Asymptotic Analysis
Big-O Notation
More Examples …
Definition of Big O
Big-O example, graphically
Big-O Visualization
No Uniqueness
Definition of
Examples
Definition of
-notation
Examples
Relations Between Different Sets
Common orders of magnitude
Common orders of magnitude
Logarithms and properties
lg
(lg
) lg lg
lg(lg
) log
log
log
log
log
log
log
log
More Examples
Properties Theorem