Download Presentation
Complexity Analysis (Part II )

Loading in 2 Seconds...

1 / 16

# Complexity Analysis (Part II ) - PowerPoint PPT Presentation

Complexity Analysis (Part II ). Asymptotic Analysis. Big-O Notation: More Details. Order Arithmetic Rules. Big-O Computation: Improved Guide lines. Require Time. n 0. Input size. Asymptotic Analysis. The Big-O notation is typically written as: f(n) = O(g(n)) .

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
Download Presentation

## PowerPoint Slideshow about 'Complexity Analysis (Part II )' - janna

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Complexity Analysis (Part II)
• Asymptotic Analysis.
• Big-O Notation: More Details.
• Order Arithmetic Rules.
• Big-O Computation: Improved Guide lines.

Require Time

n0

Input size

Asymptotic Analysis.
• The Big-O notation is typically written as: f(n) = O(g(n)).
• It reads: “f(n) is of the order of g(n)”or “f(n) is proportional to g(n)”.
• If f(n) = O(g(n)), then there exists c and no such that:

f(n) < cg(n),n > n0

• The above equation states that as n increases, the algorithm complexity grows NO faster than a constant multiple ofg(n).
Big-O Notation: Some Details
• Let's consider: f(n) = 5n + 3.
• A possible bounding function is: g(n) = n4.

5n+3 = O(n4)

• However, it is expected that the function g(n) should be of order (highest power) as small as possible.

5n+3 = O(n3) 5n+3 = O(n2)

Big-O Notation: Some Examples
• Consider the following complexity function f(n) = 100 n.
• Then, choosing: c = 100, no = 0 and g(n) = n will satisfy:

f(n) < 100n

• Then, if we have the complexity f(n) = 5n + 3.In this case, the following choice: c = 5, no = 0 and g(n) = n will satisfy:

f(n) < 5n

• Let assume now that the complexity is: f(n) = 3n2 - 100.
• The choice of: c = 3, no = 0 and g(n) = n2 is possible to have:

f(n) < 3n2

Big-O Notation: Simple Rule
• Simple Rule: Drop out lower terms, constant terms and constant factors.

SOME EXAMPLE

• If f(n) = 100 n, then:g(n) = n or 100 n is O(n).
• If f(n) = 5 n + 3, then:g(n) = n. Or 5 n + 3 is O(n).
• If f(n) = 8 n2 log n + 5 n2 + n, then:

g(n) = n2 log n. Or 8 n2 log n + 5 n2 + n is O( n2 log n).

Big-O Notation: Limitation
• The big-O notation has some problems.
• Let’s assume that we have the following complexity function:
• We can find so many g(n) limits that can be considered as a valid bound of the complexity f(n).
• So one cannot decide which g(n) will be the best for the algorithm at hand. Different choices of c and no are possible.
Big-O Notation: Arithmetic Rule
• Multiplicative constants: O(k*f(n)) = O(f(n))
• Addition rule: O(f(n)+g(n)) = O(max[f(n),g(n)])
• Multiplication rule: O(f(n)*g(n)) = O(f(n)) * O(g(n))

SOME EXAMPLE

• O(1000n) = O(n). Use multiplicative constants rule.
• O(n2+3n+2) = O(n2). Use addition rule.
• O((n3-1) (n log n + n + 2)) = O(n4log n). How??..
Computing Big-O Notation: Guideline
• Loops such as for, while, and do-while:
• The number of operations is equal to the number of iterations

(e.g., n) times all the statements inside the for loop.

• Nested loops:
• The number of statements in all the loops times the product of the sizes of all the loops.
• Consecutive statements:
• Use the addition rule of order arithmetic:

O(f(n)+g(n))=(max[f(n), g(n)]).

• if/else and if/else if statement:
• The number of operations is equal to running time of the condition evaluation and the maximum of running time of the if and else clauses. So, the complexity is: O(Cond) + O(max[if, else])
Computing Big-O Notation: Guideline (Contd.)
• switch statements:

Take the complexity of the most expensive case (with the highest number of operations).

• Methods call:

First, evaluate the complexity of the method being called.

• Recursive methods:

If it is a simple recursion, convert it to a for loop.

Computing Big-O Notation: Guideline (Contd.)
• Let’s look at the for loop case:

1 for(int I = 0; I < n; i++)

2 sum += A[i];

1 + (n + 1) + 2n + n = 4 n + 2 = O(n)

Computing Big-O Notation: Guideline (Contd.)
• Now Let’s consider an example of nested loops:

1 for(int I = 0; I < n; i++)

• for(int j = 0; j < n; j++)
• sum+= B[i][j];

4n2+ 4n +2 = O(n2)

Computing Big-O Notation: Guideline (Contd.)
• An example of consecutive statements case is shown below:

1 for(int i = 0; i < n; i++)

2 a[i] = 0;

3 for(int i = 0; i < n; i++)

4 for(int j = 0; j < n; j++) {

5 sum = i + j;

6 size += 1;

• } // End of inner loop.

O(n +n2 ) = O(n2)

Computing Big-O Notation: Guideline (Contd.)
• An example of switch statements:

1 char key;

2 int[] X = new int[5];

3 int[][] Y = new int[10][10];

4 ........

5 switch(key) {

6 case 'a':

7 for(int i = 0; i < X.length; i++)

8 sum += X[i];

9 break;

10 case 'b':

11 for(int i = 0; i < Y.length; j++)

12 for(int j = 0; j < Y[0].length; j++)

13 sum += Y[i][j];

14 break;

15 } // End of switch block

o(n)

o(n2)

o(n2)

Computing Big-O Notation: Guideline (Contd.)
• Look at the case of selection block (if-elseif) shown below:

1 char key;

2 int[][] A = new int[5][5];

3 int[][] B = new int[5][5];

4 int[][] C = new int[5][5];

5 ........

6 if(key == '+') {

7 for(int i = 0; i < n; i++)

8 for(int j = 0; j < n; j++)

9 C[i][j] = A[i][j] + B[i][j];

10 } // End of if block

11 else if(key == 'x')

12 C = matrixMult(A, B);

13 else

14 System.out.println("Error! Enter '+' or 'x'!");

O(n2)

O(n3)

O(n3)

O(n)

O(1)

• Sometimes ifelse statements must carefully checked:

O(ifelse) = O(Condition)+ Max[O(if), O(else)]

1 int[] integers = new int[10];

2 ........

3 if(hasPrimes(integers) == true)

4 integers[0] = 20;

5 else

• integers[0] = -20;

1 public boolean hasPrimes(int[] arr) {

2 for(int i = 0; i < arr.length; i++)

3 ..........

4 ..........

5 ..........

6 } // End of hasPrimes()

O(1)

O(ifelse) = O(Condition) = O(n)

Drill Questions
• Consider the function f(n) = 3 n2 - n + 4. Show that: f(n) = O(n2).
• Consider the functions f(n) = 3 n2 - n + 4 and g(n) = n log n + 5. Show that: f(n) + g(n) = O(n2).
• Consider the functions f(n) =√ n and g(n) = log n. Show that: f(n) + g(n) =O(√n).
• Indicate whether f(n) = O(g(n)) when we have f(n) = 10n and g(n) = n2 - 10n.
• Indicate whether f(n) = O(g(n)) when we have f(n) = n3 and g(n) = n2 log n.