Algorithms Readings: [SG] Ch. 2 & 3 Chapter Outline: 1. Chapter Goals 2. What are Algorithms 1. Real Life Examples (origami, recipes) 2. Definition 3. Example: A = B + C 3. 4. 5. 6. Expressing Algorithms – Pseudo-Code Simple Algorithms Recursive Algorithms Time Complexity of Algorithms (UIT2201: Algorithms) Page 1 LeongHW, SoC, NUS Algorithms Computing devices are dumb How to explain to a dumb mechanical / computing device how to solve a problem How to solve a problem using “a small, basic set of primitive instructions”. Complexity of Solving Problems. (UIT2201: Algorithms) Page 2 LeongHW, SoC, NUS 1. Goals of Algorithm Study To develop framework for instructing computer to perform tasks To introduce notion of algorithm as means of specifying how to solve a problem To introduce and appreciate approaches for defining and solving very complex tasks in terms of simpler tasks; (UIT2201: Algorithms) Page 3 LeongHW, SoC, NUS Chapter Outline: 1. Chapter Goals 2. What are Algorithms 1. Real Life Examples (origami, recipes) 2. Definition of Algorithm 3. Example: A = B + C 3. 4. 5. 6. Expressing Algorithms – Pseudo-Code Simple Algorithms Recursive Algorithms Time Complexity of Algorithms (UIT2201: Algorithms) Page 4 LeongHW, SoC, NUS 2. Computer Science and Algorithms… Computer Science can be considered… as study of algorithms including their formal properties Their hardware and software realisations Their applications to diverse areas (UIT2201: Algorithms) Page 5 LeongHW, SoC, NUS Algorithms: Real Life Examples Many Real-Life Examples Cooking: Recipe for preparing a dish Origami: The Art of Paper Folding Directions: How to go to Changi Airport Remember: Framework: How to give instructions; Alg: The actual step-by-step instructions; Abstraction: Decomposing / Simplifying (UIT2201: Algorithms) Page 6 LeongHW, SoC, NUS Real Life Example: Cooking Framework: “Cooking or Recipe language” Algorithm: “Recipe for a Dish” (step by step instructions on how to cook a dish) Problem Decomposition Preparing Ingredients; Preparing Sauce; (UIT2201: Algorithms) Page 7 LeongHW, SoC, NUS Real Life Example: Origami Framework: “Origami or Paper-Folding language” Algorithm: “Sequence of Paper-Folding Instructions” (step by step instructions for each fold) Problem Decomposition Start with a Bird Base; … Finish the Head; Finish the Legs; Finish the Tail; (UIT2201: Algorithms) Page 8 LeongHW, SoC, NUS Real Life Examples: Issues Problems/Difficulties: Imprecise Instructions; Job can often be done even if instructions are not followed precisely Modifications may be done by the person following the instructions; But, NOT for a Computer Needs to told PRECISELY what to do; Instructions must be PRECISE; Cannot be vague or ambiguous (UIT2201: Algorithms) Page 9 LeongHW, SoC, NUS Definition of Algorithm: An algorithm for solving a problem “a finite sequence of unambiguous, executable steps or instructions, which, if followed would ultimately terminate and give the solution of the problem”. Note the keywords: Finite set of steps; Unambiguous; Executable; Terminates; (UIT2201: Algorithms) Page 10 LeongHW, SoC, NUS Algorithm Examples? Problem 1: What is the largest integer INPUT: All the integers { … -2, -1, 0, 1, 2, … } OUTPUT: The largest integer Algorithm: Arrange all the integers in a list in decreasing order; MAX = first number in the list; Print out MAX; WHY is the above NOT an Algorithm? (Hint: How many integers are there?) Problem 2: Who is the tallest women in the world? Algorithm: Tutorial... (UIT2201: Algorithms) Page 11 LeongHW, SoC, NUS Example: Adding two (n-digit) numbers Input: Two positive m-digit decimal numbers (a and b) am, am-1, …., a1 bm, bm-1, …., b1 Output: The sum c = a + b cm+1, cm, cm-1, …., c1 (Note: In the textbook, it was am-1,…,a1,a0 …) (UIT2201: Algorithms) Page 12 LeongHW, SoC, NUS How to “derive” the algorithm Adding is something we all know done it a thousand times, know it “by heart” How do we give the algorithm? A step-by-step instruction to a dumb machine Try an example: 3492 8157 “Imagine you looking at yourself solving it” (UIT2201: Algorithms) Page 13 LeongHW, SoC, NUS Algorithm: Finding sum of A & B Step 1: Set the value of carry to 0 Step 2: Set the value of i to 1. Step 3: Repeat steps 4 through 6 until the value of i is > m. Step 4: Add ai and bi to the current value of carry, to get xi. Step 5: If xi < 10 then let ci=xi and reset carry to 0. Else (* i.e. xi 10 *) let ci=xi - 10 and reset carry to 1. Step 6: Increase the value of i by 1. Step 7: Set cm+1 to the value of carry. Step 8: Print the final answer cm+1, cm, …., c1 Step 9: Stop. (UIT2201: Algorithms) Page 14 LeongHW, SoC, NUS Chapter Outline: 1. Chapter Goals 2. What are Algorithms 3. Expressing Algorithms – Pseudo-Code 1. 2. 3. 4. 5. Communicating Alg to computer Pseudo-Code Primitive Operations and examples Variables and Arrays Algorithm C=A+B in pseudo-code 4. Simple Algorithms 5. Recursive Algorithms 6. Time Complexity of Algorithms (UIT2201: Algorithms) Page 15 LeongHW, SoC, NUS 3. Expressing Algorithms to Computer To communicate algorithm to computer Need way to “represent” the algorithm Cannot use English Can use computer language machine language and programming languages (Java, Pascal, C) But, these are too tedious (&technical) Use Pseudo-Code instead… (UIT2201: Algorithms) Page 16 LeongHW, SoC, NUS Pseudo-Code to express Algorithms Pseudo-Code Mixture of computer language and English Somewhere in between precise enough to describe what is meant without being too tediuos Examples: Let c be 0; Sort the list of numbers in increasing order; Need to know both syntax – representation semantics – meaning (UIT2201: Algorithms) Page 17 LeongHW, SoC, NUS Primitive Operations To describe an algorithm, we need some well-defined programming primitives Assignment primitive: assignment statement, input/output statements Conditional primitive: if statement case statement Looping (iterative) primitive: for loop, while loop, Statements are executed one-by-one (UIT2201: Algorithms) Page 18 LeongHW, SoC, NUS Conditional Primitives… if statement to take different actions based on condition Syntax if (condition) then (Step A) else (Step B) endif true Step A condition? false Step B if (condition) then (Step A) endif Semantics (UIT2201: Algorithms) Page 19 LeongHW, SoC, NUS Examples -- (if statement)… Let mark be the total-mark obtained if (mark < 40) then (print “Student fail”) else (print “Student pass”) endif … read in mark (*from the terminal*) if (mark < 40) then (Grade “F”) else if (mark < 50) then (Grade else if (mark < 60) then (Grade else if (mark < 70) then (Grade else if (mark < 80) then (Grade endif print “Student grade is”, Grade “D”) “C”) “B”) “A”); … (UIT2201: Algorithms) Page 20 LeongHW, SoC, NUS Looping Primitive – while-loop the while-loop loop a “variable” number of times Syntax while (condition) do (some sequence of statements) condition? false true Some sequence of statements; endwhile Semantics… (UIT2201: Algorithms) Page 21 LeongHW, SoC, NUS Looping Primitive – for-loop First, the for-loop loop a “fixed” or (predetermined) number of times Syntax for j a to b do (some sequence of statements) j a; (j <= b)? false true Some sequence of statements; endfor Semantics… j j+1; (UIT2201: Algorithms) Page 22 LeongHW, SoC, NUS “Exercising the alg”: for and while for j 1 to 4 do print 2*j; endfor print “--- Done ---” Output: 2 4 6 8 --- Done --- j 1; while (j <= 4) do print 2*j; j j + 1; endwhile print “--- Done ---” Output: 2 4 6 8 --- Done --(UIT2201: Algorithms) Page 23 LeongHW, SoC, NUS Variables and Arrays… In the computer, each variable is assigned a storage “box” can store one number at any time eg: sum, j, carry Arrays: Often deal with many numbers Such as A1, A2, A3, … , A100 Store as an “array” A[1], A[2], … , A[100] we treat each of them as a variable, each is assigned a storage “box” (UIT2201: Algorithms) Page 24 LeongHW, SoC, NUS Algorithm: A = B + C (in pseudo-code) We can re-write the C=A+B algorithm as follows: Alg. to Compute C = A + B: (*sum two big numbers*) carry 0; for i 1 to m do x[i] a[i] + b[i] + carry ; if (x[i] < 10) then ( c[i] x[i]; carry 0; ) else ( c[i] x[i] – 10; carry 1; ) endfor; c[m+1] carry; Print c[m+1], c[m], …., c[1] (UIT2201: Algorithms) Page 25 LeongHW, SoC, NUS Chapter Outline: 1. 2. 3. 4. Chapter Goals What are Algorithms Expressing Algorithms – Pseudo-Code Simple Algorithms 1. Simple iterative algorithms Computing Sum, Find Max/Min 2. Modular Program Design 3. Divisibility and Prime Numbers 5. Recursive Algorithms 6. Time Complexity of Algorithms (UIT2201: Algorithms) Page 26 LeongHW, SoC, NUS Simple iterative algorithm: Sum Given: List of numbers: A1, A2, A3, …., An Output: To compute the sum of the numbers Note: Store numbers in array A[1], A[2], … , A[n] Sum(A, n); begin Sum_sf 0; k 1; while (k <= n) do Sum_sf Sum_sf + A[k]; k k + 1; endwhile Sum Sum_sf; Print “Sum is”, Sum end; (UIT2201: Algorithms) Page 27 LeongHW, SoC, NUS Exercising Algorithm Sum: Input: A[1] A[2] A[3] A[4] A[5] A[6] 2 5 10 3 12 24 Processing: Output: k ? 1 2 3 4 5 6 6 Sum-sf 0 2 7 17 20 32 56 56 n=6 Sum ? ? ? ? ? ? ? 56 Sum is 56 (UIT2201: Algorithms) Page 28 LeongHW, SoC, NUS Algorithm for Sum (with for-loop) We can also use a while-loop instead of a for loop. Sum(A, n); (* Find the sum of A1, A2,…, An. *) begin Sum_sf 0; for k 1 to n do Sum_sf Sum_sf + A[k]; endfor Sum Sum_sf; Print “Sum is”, Sum end; HW: (a) Note the differences… (b) Modify it to compute the average? (UIT2201: Algorithms) Page 29 LeongHW, SoC, NUS Remarks about the iterative algorithm… Note the three stages: 1. Initialization Set some values at the beginning 2. Iteration This is the KEY STEP Where most of work is done 3. Post-Processing or Cleanup Can use this setup for other problems Calculating average, sum-of-squares Finding max, min; Searching for a number, (UIT2201: Algorithms) Page 30 LeongHW, SoC, NUS Modular Program Design Software are complex HUGE (millions of lines of code) eg: Linux, Outlook COMPLEX; eg: Flight simulator Idea: Divide-and-Conquer Method Complex tasks can be divided and each part solved separately and combined later. Modular Program Design Divide big programs into smaller modules The smaller parts are called modules, subroutines, or procedures Design, implement, and test separately Modularity, Abstraction, Division of Labour Simplifies process of writing alg/programs (UIT2201: Algorithms) Page 31 LeongHW, SoC, NUS Simple Algorithms: Prime Numbers Algorithm to determine if n is prime Given: A positive integer n Question: Is n a prime number? What do we know? “A number n is prime iff n has no positive factors except 1 and n” Idea: Express it “algorithmically” “n is not divisible by any positive number k such that 1 < k < n.” or k=2,3,4,…,(n-1) What we already have: A module Divisible(m,n) to check divisibility We can use it as a primitive (UIT2201: Algorithms) Page 32 LeongHW, SoC, NUS Pseudo-Code for Prime: Prime(n) (* To determine if n is prime *) begin for k 2 to (n-1) do if Divisible(k,n) then (Print “False” & exit) else (* Do nothing *) endfor Print “True” & Stop end; Note: Prime uses the module Divisible(k,n) Exercise it with: Prime (5); Prime (4); Prime (55); Prime (41); (UIT2201: Algorithms) Page 33 LeongHW, SoC, NUS A Simple Module: Divisibility A module (procedure) for divisibility Given: Two positive integers m and n Question: Is n divisible by m? or Algorithm to compute Divisible(m,n) { True, if n is divisible by m Divisible (m, n) False, if n is not divisible by m Algorithm Idea: “A positive integer n is divisible by m iff for some positive integer k n, m*k = n.” (UIT2201: Algorithms) Page 34 LeongHW, SoC, NUS Module for Divisibility: Algorithm (in pseudo-code) Exercise it with: Divisible (3, 9); Divisible (3, 5); Divisible (3,101); Divisible(m,n) (* To compute if n is divisible by m *) begin D false; (* assume false, first *) for k 1 to n do if (m*k = n) then (Dtrue; exit-loop) else (* Do nothing *) endfor Divisible D; (* true or false *) end; (UIT2201: Algorithms) Page 35 LeongHW, SoC, NUS Chapter Outline: 1. 2. 3. 4. 5. 6. Chapter Goals What are Algorithms Expressing Algorithms – Pseudo-Code Simple Algorithms Recursive Algorithms Time Complexity of Algorithms 1. Sequential search algorithm 2. Binary search algorithm 3. Analysis of Time Complexity 7. Summary… (UIT2201: Algorithms) Page 36 LeongHW, SoC, NUS Search: sequential search algorithm List of numbers: A1, A2, A3, …., An and a query number x; Given: Question: Search for x in the list; Sequential-Search(A, n, x); (* Search for x in A1, A2,…, An. *) begin for k 1 to n do if (x = A[k]) then (Print “Yes”; Stop) else (* do nothing *) endfor Print “No”; Stop end; (UIT2201: Algorithms) Page 37 LeongHW, SoC, NUS Remarks on Sequential Search Alg Analogy: House-to-house search… How fast is it to search for x? How many comparisons do we need? Example: 13, 38, 19, 74, 76, 14, 12, 38, 22, 55 When x=14, need 6 comparisons When x=13, need only 1 comparison BEST CASE When x=55, need 10 comparisons WORST CASE When x=5, need 10 comparisons WORST CASE In general, given n numbers, A1,…,An Best Case: 1 comparison Worst Case: n comparisons Average Case: (n+1)/2 comparisons (UIT2201: Algorithms) Page 38 LeongHW, SoC, NUS Binary Search If the List is sorted, that is A1 A2 A3 …. An Then, we can do better, actually a lot better…. (UIT2201: Algorithms) Page 39 LeongHW, SoC, NUS Binary Search 1, 4, 9, 11, 14, 43, 78 (UIT2201: Algorithms) Page 40 LeongHW, SoC, NUS Binary Search (How fast is it?) Imagine n=100 After 1 step, size is 50 After 2 steps, size is 25 After 3 steps, size is 12 After 4 steps, size is 6 After 5 steps, size is 3 After 6 steps, size is 1 DONE!! What if n=1000? 1,000,000? (UIT2201: Algorithms) Page 41 LeongHW, SoC, NUS Binary Search Algorithm Sorted List A1 A2 A3 …. An A number x. Question: Is x in the list? Binary-Search(A,n,x); 1. First 1 Last n 2. While ( First Last ) do mid (first+last) / 2 If ( x = A[mid] ) then (output Yes and Stop) else If ( x < A[mid] ) then Last mid-1 else If ( x > A[mid] ) then First mid+1 EndWhile 3. Output False and Stop 4. End Input: (UIT2201: Algorithms) Page 42 LeongHW, SoC, NUS Time Complexity Analysis Sequential Search (Alg): Worst Case: n comparisons Best Case: 1 comparison Avg Case: n/2 comparisons Binary Search (Alg): Worst Case: log2 n comparisons Best Case: 1 comparison Avg Case: about log2 n comparisons How to get the Average Case? using mathematical analysis… (UIT2201: Algorithms) Page 43 LeongHW, SoC, NUS Complexity of Algorithm… Logarithmic Time Algorithm Binary Search A Linear Time Algorithm Algorithm Sum(A,n) -- O(n) time Algorithm Sequential-Search(A,n,x) – O(n) time A Quadratic Time Algorithm Simple Median-Find (T2-Q3) An Exponential Time Algorithm All-Subsets(A,n) (UIT2201: Algorithms) Page 44 LeongHW, SoC, NUS Chapter Outline: 1. 2. 3. 4. 5. Chapter Goals What are Algorithms Expressing Algorithms – Pseudo-Code Simple Algorithms Recursive Algorithms 1. Recursion – the idea 2. Fibonacci sequence 3. Tower of Hanoi 6. Time Complexity of Algorithms (UIT2201: Algorithms) Page 45 LeongHW, SoC, NUS 5. Recursion A problem solving method of “decomposing bigger problems into smaller sub-problems that are identical to itself.” General Idea: Solve simplest (smallest) cases DIRECTLY usually these are very easy to solve Solve bigger problems using smaller sub-problems that are identical to itself (but smaller and simpler) Abstraction: To solve a given problem, we first assume that we ALREADY know how to solve it for smaller instances!! Dictionary definition: recursion see recursion (UIT2201: Algorithms) Page 46 LeongHW, SoC, NUS Example: Fibonacci Numbers… Definition of Fibonacci numbers 1. F1 = 1, 2. F2 = 1, 3. for n>2, Fn = Fn-1 + Fn-2 Problem: Compute Fn for any n. The above is a recursive definition. Fn is computed in-terms of itself actually, smaller copies of itself – Fn-1 and Fn-2 Actually, Not difficult: F3 = 1 + 1 = 2 F4 = 2 + 1 = 3 F5 = 3 + 2 = 5 F6 = 5 + 3 = 8 F7 = 8 + 5 = 13 F8 = 13 + 8 = 21 F9 = 21 + 13 = 34 F10 = 34 + 21 = 55 F11 = 55 + 34 = 89 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, … (UIT2201: Algorithms) Page 47 LeongHW, SoC, NUS Fibonacci Numbers: Recursive alg Fibonacci(n) (* Recursive, SLOW *) begin if (n=1) or (n=2) then Fibonacci(n) 1 (*simple case*) else Fibonacci(n) Fibonacci(n-1) + Fibonacci(n-2) endif end; The It above is a recursive algorithm is simple to understand and elegant! But, very SLOW (UIT2201: Algorithms) Page 48 LeongHW, SoC, NUS Recursive Fibonacci Alg -- Remarks How slow is it? Eg: To compute F(6)… F(6) F(5) F(4) F(4) F(3) F(2) F(3) F(2) F(2) F(3) F(1) F(2) F(2) F(1) F(1) HW: Can we compute it faster? (UIT2201: Algorithms) Page 49 LeongHW, SoC, NUS Example: Tower of Hanoi A B C A B Given: Three Pegs A, B and C Peg A initially has n disks, different size, stacked up, larger disks are below smaller disks Problem: to move the n disks to Peg C, subject to 1. Can move only one disk at a time 2. Smaller disk should be above larger disk 3. Can use other peg as intermediate (UIT2201: Algorithms) Page 50 LeongHW, SoC, NUS C Tower of Hanoi How to Solve: Strategy… Generalize first: Consider n disks for all n 1 Our example is only the case when n=4 Look at small instances… How about n=1 Of course, just “Move disk 1 from A to C” How about n=2? 1. “Move disk 1 from A to B” 2. “Move disk 2 from A to C” 3. “Move disk 1 from B to C” (UIT2201: Algorithms) Page 51 LeongHW, SoC, NUS Tower of Hanoi (Solution!) General Method: First, move first (n-1) disks from A to B Now, can move largest disk from A to C Then, move first (n-1) disks from B to C Try this method for n=3 1. “Move disk 1 from A to C” 2. “Move disk 2 from A to B” 3. “Move disk 1 from C to B” 4. “Move disk 3 from A to C” 5. “Move disk 1 from B to A” 6. “Move disk 1 from B to C” 7. “Move disk 1 from A to C” (UIT2201: Algorithms) Page 52 LeongHW, SoC, NUS Algorithm for Towel of Hanoi (recursive) Recursive Algorithm when (n=1), we have simple case Else (decompose problem and make recursive-calls) Hanoi(n, A, B, C); (* Move n disks from A to C via B *) begin if (n=1) then “Move top disk from A to C” else (* when n>1 *) Hanoi (n-1, A, C, B); “Move top disk from A to C” Hanoi (n-1, B, C, A); endif end; (UIT2201: Algorithms) Page 53 LeongHW, SoC, NUS Characteristics of Algorithm Correctness Complexity --- time, space (memory), etc Ease of understanding Ease of coding Ease of maintainence (UIT2201: Algorithms) Page 54 LeongHW, SoC, NUS If you are new to algorithms read the textbook try out the algorithms do the exercises … The End … (UIT2201: Algorithms) Page 55 LeongHW, SoC, NUS