* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download Logarithms in running time
Computational complexity theory wikipedia , lookup
Lateral computing wikipedia , lookup
Pattern recognition wikipedia , lookup
Theoretical computer science wikipedia , lookup
Probabilistic context-free grammar wikipedia , lookup
Simplex algorithm wikipedia , lookup
Smith–Waterman algorithm wikipedia , lookup
K-nearest neighbors algorithm wikipedia , lookup
Sieve of Eratosthenes wikipedia , lookup
Genetic algorithm wikipedia , lookup
Fisher–Yates shuffle wikipedia , lookup
Binary search algorithm wikipedia , lookup
Fast Fourier transform wikipedia , lookup
Expectation–maximization algorithm wikipedia , lookup
Corecursion wikipedia , lookup
Recursion (computer science) wikipedia , lookup
Selection algorithm wikipedia , lookup
Dijkstra's algorithm wikipedia , lookup
Algorithm characterizations wikipedia , lookup
Euclidean algorithm wikipedia , lookup
Polynomial greatest common divisor wikipedia , lookup
Time complexity wikipedia , lookup
Factorization of polynomials over finite fields wikipedia , lookup
Mark Allen Weiss: Data Structures and Algorithm Analysis in Java Chapter 2: Algorithm Analysis Application of Big-Oh to program analysis Logarithms in Running Time Lydia Sinapova, Simpson College Logarithms in Running Time Binary search Euclid’s algorithm Exponentials Rules to count operations 2 Divide-and-conquer algorithms Subsequently reducing the problem by a factor of two require O(logN) operations 3 Why logN? A complete binary tree with N leaves has logN levels. Each level in the divide-andconquer algorithms corresponds to an operation Hence the number of operations is O(logN) 4 Example: 8 leaves, 3 levels 5 Binary Search Solution 1: Scan all elements from left to right, each time comparing with X. O(N) operations. 6 Binary Search Solution 2: O(logN) Find the middle element Amid in the list and compare it with X If they are equal, stop If X < Amid consider the left part If X > Amid consider the right part Do until the list is reduced to one element 7 Euclid's algorithm Finding the greatest common divisor (GCD) GCD of M and N, M > N, = GCD of N and M % N 8 GCD and recursion Recursion: If M%N = 0 return N Else return GCD(N, M%N) The answer is the last nonzero remainder. 9 M 24 N 15 rem 9 15 9 6 9 6 3 3 0 6 3 0 10 long gcd ( long m, long n) { long rem; while (n != 0) { rem = m % n; m = n; n = rem; } return m; } Euclid’s Algorithm (non-recursive implementation) 11 Why O(logN) M % N <= M / 2 After 1st iteration N appears as first argument, the remainder is less than N/2 After 2nd iteration the remainder appears as first argument and will be reduced by a factor of two Hence O(logN) 12 Computing XN N X N X = 2 N / 2 X*(X ) ,N is odd = 2 N / 2 (X ) ,N is even 13 long pow (long x, int n) { if ( n == 0) return 1; if (is_Even( n )) return pow(x * x, n/2); else return } x * pow ( x * x, n/2); 14 Why O(LogN) If N is odd : two multiplications The operations are at most 2logN: O(logN) 15 Another recursion for XN Another recursive definition that reduces the power just by 1: XN = X*XN -1 Here the operations are N-1, i.e. O(N) and the algorithm is less efficient than the divide-and-conquer algorithm. 16 How to count operations single statements (not function calls) : constant O(1) = 1. sequential fragments: the maximum of the operations of each fragment 17 How to count operations single loop running up to N, with single statements in its body: O(N) single loop running up to N, with the number of operations in the body O(f(N)): O( N * f(N) ) 18 How to count operations two nested loops each running up to N, with single statements: O(N2) divide-and-conquer algorithms with input size N: O(logN) Or O(N*logN) if each step requires additional processing of N elements 19 Example: What is the probability two numbers to be relatively prime? tot = 0; rel = 0; for ( i = 0; i <= n; i++) for (j = i+1; j <= n; j++) { tot++; if ( gcd( i, j ) ==1) rel++; } return (rel/tot); Running time = ? 20