algorithmic design strategies 2055646