1. ► Greedy algorithm doesnâ€™t guarantee global optimal

2. ► Rabin-Karp algorithm reuses previously calculated hash values

3. ► Greedy choice can never give optimal result

4. ► Dynamic programming works in the top down manner

5. ► Fibonacci series can be calculated efficiently with dynamic programming

6. ► Heuristics are based on proper mathematical proofs

7. ► Dynamic programming also follows divide and conquer approach

8. ► Dynamic programming makes use of previously calculated solution

9. ► Average case complexity of Rabin-Karp is O(nm)

10. ► Approximation algorithms provide bounds on the quality of the solution mathematically

11. ► Graph coloring can be used to solve processor register allocation in compilers

12. ► Rabin-Karp algorithm relies on hash function to convert strings to numbers

13. ► For overlapping optimal substructure, dynamic programming gives optimal solution

14. ► Brute force string matching relies on char by char comparison

15. ► String matching is quite common in scripting languages