220 likes | 823 Views
Big O notation. Big O Notation (informal definition). O: order of magnitude Look at the loops and to see whether the loops are nested. One single loop: O(n) A nested loop: O(n 2 ) A nested loop in a loop: O(n 3 ). Formal definition of Big O. for ( int i =0; i <n; i ++)
E N D
Big O Notation (informal definition) • O: order of magnitude • Look at the loops and to see whether the loops are nested. • One single loop: O(n) • A nested loop: O(n2) • A nested loop in a loop: O(n3)
Formal definition of Big O for (inti=0; i<n; i++) for (int j=0; j< n; j++) simple statement for(int k=0; k< n; k++) { simple statement 1 simple statement 2 simple statement 3 simple statement 4 simple statement 5 } Simple statement 6 …… Simple statement 30 n2 5n 25
Formal definition of Big O • T(n) = n2 + 5n + 25 Or T(n) = O(f(n)) These exists two constants, n0 and c (>0) and a function f(n) such that all n>n0, cf(n) T(n). Translate as: If n gets sufficiently large, there is some constants c for which processing time will always be less than or equal to cf(n). cf(n) is an upper bound on the performance.
Formal definition of Big O • The growth rate of f(n) will be determined by the growth rate of the fastest growing term • It’s safe to ignore all constants and drop the lower order terms when determining the Big O for an algorithm
Example for (inti=0; i< n-1; i++) { for (int j=i+1; j<n; j++) { Simple statement 1 Simple statement 2 Simple statement 3 } } T(n) = 3(n-1) +3(n-2) + 3(n-3)+…..+3 = 3(n-1+n-2+n-3+….+1) = 3n(n-1)/2 = 1.5n2 -1.5n n0=1, c = 1.5 1.5n2 1.5n2-1.5n
Example for (i=0; i< x.length; i *=2) { // print out i } • The loop body will execute k-1 times with i: 1,2,4,8,16… until 2k > x.length • 2k-1 <= x.length < 2k • K-1 <= log2(x.length) < k • So this loop has O(log2n)
Example 1. for (inti=0; i<n; i++) for (int j=0; j<n; j++) System.out.println(i+” “+j); 2. for (inti=0; i<n; i++) for (int j=0; j<2; j++) System.out.println(i+” “+j);
Example 3. for (inti=0; i<n; i++) for (int j=n-1; j>=i; j--) System.out.println(i+” “+j); 4. for (inti=0; i<n; i++) for (int j=0; j<i; j++) if (j %i == 0) System.out.println(i+” “+j);
Example for (inti=1; i<=n; i++) for (int j=1; j<=n; j++) for (int k=n; k>=1 ; k--) { Int sum = i+j+k; } } }
Common rule for polynomials • If T(n) is the form of a polynomial of degree d (d is the highest exponent), then it is O(nd). • O(1) represents a constant growth rate. This value doesn’t change with the number of inputs. Any finite number of O(1) steps is still O(1)
Example public static booleanareUnique(int[] x) { for(inti=0; i< x.length; i++) { for (int j=0; j<x.length; j++) { if (i != j && x[i] == x[j]) return false; } } return true; }