4.2 Algorithm design methods