There are two basic ingredients every greedy algorithm has in common. They are as follows: Optimal substructure property Greedy choice property