Download presentation
Presentation is loading. Please wait.
1
More on Problem Solving
2
Factorial Computation
Given a number n, compute the factorial of n Assume n >= 0 What is factorial? 0! = 1, 1! = 1, 2! = 1*2 = 2 3! = 1*2*3 = 6 4! = 1*2*3*4* = 24 n! = 1*2*...*(n-1)*n, for n>=1
3
The algorithm Observation: For n>=1, n! is (n-1)! multiplied by n
Strategy: Given n, compute n! by successively computing 1!, 2!, etc. till n! Algorithm Fact: Input n Output Fact 1. initialize fact to 1 and index to 1 2. do while (index < = n) steps 2.1 and fact = fact * index index = index + 1 end Fact
4
Analysis Is the solution correct?
Loop invariant: At the beginning of each iteration, fact holds the partial product 1 * * (index-1) When the loop terminates, index = (n+1) fact then holds (1 * ... * n) Does the loop terminate? There is a bound function: (n + 1 – index) The bound function always >= 0 It decreases in each iteration
5
Efficiency Analysis How many operations? n multiplications
Can we do better? Yes, there is a method using (log n) operations
6
Extracting the digits Problem: Given a number, list its digits of the number from right to left (How about left to right?) Example: If given number is then the program should output 5,6,8,0,5 If the input is 0 then output is 0 If the input is 7680 the output is 0,8,6,7 Solution?
7
One Strategy Divide the given number by 10. The remainder is the last digit Divide the quotient by 10. The new remainder is the next last digit Divide the new quotient by 10. The newer remainder is the next last digit and so on. Till no more digits
8
The Algorithm Algorithm Digit_Extract: Input N Output List
quotient = N do while (quotient > 0) 2.1, 2.2, divide the quotient by obtain the remainder and the new quotient Add the remainder to List end Digit_Extract
9
Analysis of the Algorithm
Is the algorithm correct? Does the algorithm terminate? How many operations?
10
From Digits to Numbers This is the inverse problem
Given a list of digits from, left to right, of a number, obtain the number Example: Given 4,7,8 the required number is 478 Given 0,8,0,5,6, the required number is 8056 Aside: The alternate problem, where the digits are given from right to left order is, less easy.
11
Solution Strategy Observation: If the list of digits are 4,7,8 then
4 (102) + 7 100 = 478 the required number This suggests the following strategy: Take the first number Multiply by 10 and add it to the next number Multiply the resulting number by 10 and add it to the next number and so on
12
The algorithm Algorithm Form_no: Input: List Output: d
d = the first digit in List do while (next_digit in List) step 2.1 2.1 d = 10*d + next_digit end Form_no Is the algorithm correct? Does it terminate? How many number of operations?
13
Another Problem Problem: Reversing the Digits of an integer Examples:
Input: Output: 20985 Input: 4300 Output: 34
14
Solution Strategy Here is a high level strategy:
Extract the list of digits from the number Obtain the new number from the list How do you extract the digits? Use the earlier algorithm How do you obtain the new number? Use the previous algorithm Are the digits reversed?
15
Top Down Strategy The above solution follows the top-down methodology
Break the problem into two or more sub problems Obtain the solutions for the sub problems Combine the solutions to get the solution for the original problem Many Large problems can be solved using top-down approach Obtain the algorithm for the problem using the two previous algorithm
16
The algorithm for Digit Reversal
Algorithm Digit_Reversal Input: N, the number to be reversed Output: M, the reversed number q = N M = 0 Do while (q > 0) steps 3.1,3.2,3.3 3.1 rem = remainder of q by 10 3.2 M = M*10 + rem 3.3 q = quotient of q by 10 end Digit_Reversal
17
Analysis of the algorithm
Is the algorithm correct? Does it terminate? How many number of iterations? How many number of operations?
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.