Spann, James, Meteorologist has reference to this Academic Journal, PHwiki organized this Journal Copyright © 2007 Pearson Addison-Wesley. All rights reserved. Chapter 1 Introduction What is an algorithm An algorithm is a sequence of unambiguous instructions as long as solving a problem, i.e., as long as obtaining a required output as long as any legitimate input in a finite amount of time. computer problem algorithm input output Algorithm An algorithm is a sequence of unambiguous instructions as long as solving a problem, i.e., as long as obtaining a required output as long as any legitimate input in a finite amount of time. Can be represented various as long as ms Unambiguity/clearness Effectiveness Finiteness/termination Correctness

This Particular University is Related to this Particular Journal

Historical Perspective Euclids algorithm as long as finding the greatest common divisor Muhammad ibn Musa al-Khwarizmi  9th century mathematician www.lib.virginia.edu/science/parshall/khwariz.html Notion of algorithm in addition to problem computer algorithmic solution (different from a conventional solution) problem algorithm input (or instance) output Example of computational problem: sorting Statement of problem: Input: A sequence of n numbers Output: A reordering of the input sequence so that a´i a´j whenever i < j Instance: The sequence <5, 3, 2, 8, 3> Algorithms: Selection sort Insertion sort Merge sort (many others)

Selection Sort Input: array a[1], ,a[n] Output: array a sorted in non-decreasing order Algorithm: as long as i=1 to n swap a[i] with smallest of a[i], ,a[n] Is this unambiguous Effective See also pseudocode, section 3.1 Some Well-known Computational Problems Sorting Searching Shortest paths in a graph Minimum spanning tree Primality testing Traveling salesman problem Knapsack problem Chess Towers of Hanoi Program termination Some of these problems dont have efficient algorithms, or algorithms at all! Basic Issues Related to Algorithms How to design algorithms How to express algorithms Proving correctness Efficiency (or complexity) analysis Theoretical analysis Empirical analysis Optimality

Algorithm design strategies Brute as long as ce Divide in addition to conquer Decrease in addition to conquer Trans as long as m in addition to conquer Greedy approach Dynamic programming Backtracking in addition to branch- in addition to -bound Space in addition to time tradeoffs 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 the following requirements: Finiteness terminates after a finite number of steps Definiteness rigorously in addition to unambiguously specified Clearly specified input valid inputs are clearly specified Clearly specified/expected output can be proved to produce the correct output given a valid input Effectiveness steps are sufficiently simple in addition to basic

Why study algorithms Theoretical importance the core of computer science Practical importance A practitioners toolkit of known algorithms Framework as long as designing in addition to analyzing algorithms as long as new problems Example: Googles PageRank Technology Euclids Algorithm Problem: Find gcd(m,n), the greatest common divisor of two nonnegative, not both zero integers m in addition to n Examples: gcd(60,24) = 12, gcd(60,0) = 60, gcd(0,0) = Euclids algorithm is based on repeated application of equality gcd(m,n) = gcd(n, m mod n) until the second number becomes 0, which makes the problem trivial. Example: gcd(60,24) = gcd(24,12) = gcd(12,0) = 12 Two descriptions of Euclids algorithm Step 1 If n = 0, return m in addition to stop; otherwise go to Step 2 Step 2 Divide m by n in addition to assign the value of the remainder to r Step 3 Assign the value of n to m in addition to the value of r to n. Go to Step 1. while n 0 do r m mod n m n n r return m

Other methods as long as computing gcd(m,n) Consecutive integer checking algorithm Step 1 Assign the value of min{m,n} to t Step 2 Divide m by t. If the remainder is 0, go to Step 3; otherwise, go to Step 4 Step 3 Divide n by t. If the remainder is 0, return t in addition to stop; otherwise, go to Step 4 Step 4 Decrease t by 1 in addition to go to Step 2 Is this slower than Euclids algorithm How much slower O(n), if n <= m , vs O(log n) Other methods as long as gcd(m,n) [cont.] Middle-school procedure Step 1 Find the prime factorization of m Step 2 Find the prime factorization of n Step 3 Find all the common prime factors Step 4 Compute the product of all the common prime factors in addition to return it as gcd(m,n) Is this an algorithm How efficient is it Time complexity: O(sqrt(n)) Sieve of Eratosthenes Input: Integer n 2 Output: List of primes less than or equal to n as long as p 2 to n do A[p] p as long as p 2 to n do if A[p] 0 //p hasnt been previously eliminated from the list j p p while j n do A[j] 0 //mark element as eliminated j j + p Example: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Time complexity: O(n) Two main issues related to algorithms How to design algorithms How to analyze algorithm efficiency Algorithm design techniques/strategies Brute as long as ce Divide in addition to conquer Decrease in addition to conquer Trans as long as m in addition to conquer Space in addition to time tradeoffs Greedy approach Dynamic programming Iterative improvement Backtracking Branch in addition to bound Analysis of algorithms How good is the algorithm time efficiency space efficiency correctness ignored in this course Does there exist a better algorithm lower bounds optimality Important problem types sorting searching string processing graph problems combinatorial problems geometric problems numerical problems Sorting (I) Rearrange the items of a given list in ascending order. Input: A sequence of n numbers Output: A reordering of the input sequence such that a´1 a´2 a´n. Why sorting Help searching Algorithms often use sorting as a key subroutine. Sorting key A specially chosen piece of in as long as mation used to guide sorting. E.g., sort student records by names. Sorting (II) Examples of sorting algorithms Selection sort Bubble sort Insertion sort Merge sort Heap sort Evaluate sorting algorithm complexity: the number of key comparisons. Two properties Stability: A sorting algorithm is called stable if it preserves the relative order of any two equal elements in its input. In place : A sorting algorithm is in place if it does not require extra memory, except, possibly as long as a few memory units.