Data Structures & Algorithms Algorithm An algorithm is a sequence of unambiguous instructions for solving a problem, i.e., for obtaining a required output for any legitimate input in a finite amount of time. A Problem Find the greatest common divisor of two nonnegative, non-both-zero integers m and n, denoted gcd(m,n) gcd(m,n), the largest integer that divides both m and n evenly, i.e., with a remainder of zero Greatest Common Divisor (GCD) Algorithm 1 Step 1 Assign the value of min{m,n} to t Step 2 Divide m by t. If the remainder of this division is 0, go to Step 3; otherwise, to Step 4 Step 3 Divide n by t. If the remainder of this division is 0, return the value of t as the answer and stop; otherwise, proceed to Step 4 Step 4 Decrease the value of t by 1. Go to Step 2 Note: m and n are positive integers GCD Procedure 2 Step 1 Find the prime factors of m Step 2 Find the prime factors of n Step 3 Identify all the common factors in the two prime expansions found in Steps 1 and 2. If p is a common factor occurring i and j times in m and n, respectively, it should be repeated min{i, j} times Step 4 Compute the product of all the common factors and return it as the GCD of m and n Note: as written, this procedure requires that m and n be integers greater than 1, since 1 is not a prime Is this procedure an algorithm? Algorithm 2? Procedure 2 is not an algorithm unless we can provide an effective way to find prime factors of a number The sieve of Eratosthenes is an algorithm that provides such an effective procedure Euclid’s Algorithm Idea: if n 0, gcd(m, n) = gcd(n, m mod n); if n = 0, gcd(m, n) = m. Euclid’s algorithm for computing gcd(m, n) Step1 If n=0, return the value of m as the answer and stop; otherwise proceed to Step2. Step2 Divide m by n and assign the value of the remainder to r. Step3 Assign the value of n to m and the value of r to n. Go to Step1. Exercise Page8 Problem5 a. Find gcd(31415, 14142) by applying Euclid’s algorithm. b. Estimate how many times faster it will be to find gcd(31415, 14142) by Euclid’s algorithm compared with the algorithm based on checking consecutive integers from min(m, n) down to gcd(m, n). Analysis of Algorithms How good is the algorithm? Correctness Time efficiency Space efficiency Does there exist a better algorithm? Lower bounds Optimality What is an algorithm? Recipe, process, method, technique, procedure, routine,… with following requirements: 1. Finiteness 2. Definiteness 3. valid inputs are clearly specified Output 5. rigorously and unambiguously specified Input 4. terminates after a finite number of steps can be proved to produce the correct output given a valid input Effectiveness steps are sufficiently simple and basic Algorithm Design and Analysis Process Understand the problem Decide on : algorithm design techniques etc. Design an algorithm Algorithm Design and Analysis Process Understand the problem Decide on : algorithm design techniques etc. Design an algorithm Prove correctness Analyze efficiency etc. Algorithm Design and Analysis Process Understand the problem Decide on : algorithm design techniques etc. Design an algorithm Prove correctness Analyze efficiency etc Code the algorithm correctness efficiency Correctness Termination Well-founded sets: find a quantity that is never negative and that always decreases as the algorithm is executed Prove the Correctness for Euclid’s Algorithm Idea: if n 0, gcd(m, n) = gcd(n, m mod n); if n = 0, gcd(m, n) = m. Euclid’s algorithm for computing gcd(m, n) Step1 If n=0, return the value of m as the answer and stop; otherwise proceed to Step2. Step2 Divide m by n and assign the value of the remainder to r. Step3 Assign the value of n to m and the value of r to n. Go to Step1. Complexity Space complexity Time complexity For iterative algorithms: sums For recursive algorithms: recurrence relations