Download presentation
Presentation is loading. Please wait.
Published byGodfrey Gray Modified over 9 years ago
1
The Complexity of Algorithms: Selected Exercises Goal: Introduce computational complexity analysis.
2
Copyright © Peter Cappello2 Exercise 10 How much time does an algorithm take for a problem of size n, if it uses 2n 2 + 2 n bit operations, each taking 10 -9 second? a)n = 10: ( 2(10) 2 + 2 10 )10 -9 sec ≈ 1.224 * 10 -6 sec. b)n = 20: ( 2(20) 2 + 2 20 )10 -9 sec ≈ 1.05 *10 -3 sec. c)n = 50: ( 2(50) 2 + 2 50 )10 -9 sec ≈ 1.13 *10 6 sec ≈ 13 days. d)n = 100: ( 2(100) 2 + 2 100 )10 -9 sec ≈ 1.27 *10 21 sec ≈ 4 *10 13 years.
3
Copyright © Peter Cappello3 Exercise 20 Analyze the worst-case [time] complexity of the program on the following slide, in terms of the number of elements in the input array. (That is, give a O() estimate of the time.)
4
Copyright © Peter Cappello4 Method (not compiled) List getBiggersList( int[] intArray ) { List biggers = new LinkedList (); int sum = 0; for ( int item : intArray ) { if ( item > sum ) biggers.add( item ); sum += item; } return biggers; }
5
Copyright © Peter Cappello5 Exercise 20 continued Let n = intArray.length. The statements outside the for statement complete in constant time, say c 1 sec. The body of the for statement executes n times. Each iteration of the body takes constant time, say c 2 sec. Only if the List add operation requires constant time (i.e., does not depend on n). Total time, in seconds, is c 1 + c 2 n, which is O( n ).
6
Copyright © Peter Cappello6 Exponentiation revisited double x2n( double x, int n ) { double x2n = 1.0; for ( int i = 0; i < n; i++ ) x2n *= x; return x2n; } double x2z( double x, int z ) { return ( z < 0 ) ? 1.0 / x2n( x, -z ) : x2n( x, z ); } Give a O() estimate for the time to compute x2n as a function of n.
7
Copyright © Peter Cappello7 Program Notes Consider a faster algorithm for x2n. (But which continues to ignore underflow/overflow.)
8
Copyright © Peter Cappello8 Faster algorithm for x2n double x2n( double x, int n ) { double x2n = 1.0, factor = x; while ( n > 0 ) { if ( n % 2 == 1 ) x2n *= factor; n /= 2; factor *= factor; } return x2n; } Evaluate the algorithm for n = 21. Give a O() estimate for the time to compute x2n as a function of n.
9
Copyright © Peter Cappello9 Recursive version of faster algorithm double x2n( double x, int n ) { if ( n == 0 ) return 1.0; return ( ( n % 2 == 0 ) ? 1 : x ) * x2n( x * x, n / 2 ); } Evaluate x2n( 2.0, 21 ). How many times is x2n invoked, as a function of n? We address this question when we study recurrence relations.
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.