https://www.topcoder.com/community/data-science/data-science-tutorials/greedy-is-good/
Two basic ingredients in every greedy algorithm
- Greedy Choice Property: from a local optimum we can reach a global optimum, without having to reconsider the decisions already taken
- Optimal Substructure Property: the optimal solution to a problem can be determined from the optimal solutions to its subproblems.