140 likes | 270 Vues
This document explores various algorithm design approaches, particularly focusing on cost minimization problems like petrol cost and stops minimization. It explains the characteristics of greedy algorithms and dynamic programming, using examples such as the fractional knapsack and the Fibonacci number problem. Through recursive and dynamic programming solutions, it highlights the efficiency of algorithms in solving repetitive subproblems. This analysis aims to provide insights into optimal strategies for tackling various computational challenges.
E N D
Algorithm Design approaches Dr. Jey Veerasamy
Petrol cost minimization problem • You need to go from S to T by car, spending the minimum for petrol. S T
# of stops minimization problem • Similar to petrol cost minimization problem, but we are minimizing # of stops. S T
Fractional knapsack problem • Gold powder, silver powder, … • Thief has limited weight capacity
Fibonacci number problem • Definition of Fibonacci number: F(1) = 1 F(2) = 2 F(n) = F(n-1) + F(n-2), when n > 2 • Recursive solution using D&C approach: int f(int n) { if (n == 1) return 1; else if (n == 2) return 2; else return f(n-1) + f(n-2); }
D&C Solution for F(6) F(6) F(4) F(5) F(4) F(3) F(3) F(2) F(3) F(2) F(2) F(1) F(2) F(1) Several subproblems are solved repeatedly - Not an efficient approach. F(2) F(1)
DP solution for F(6) • DP uses a table and bottom-up approach (note that D&C used top-down approach): int fib(int n) { int f[n+1]; f[1] = 1; f[2] = 2; for (i=3 ; i<= n ; i++) f[i] = f[i-1]+f[i-2]; return f[n]; } Computations are NOT repeated! F(1) F(2) F(3) F(4) F(5) F(6)
Knapsack problem • Individual pieces with specific weights, thief wants to know whether there is an exact match for his weight limit.