This module follows on from Program Construction I and builds upon the knowledge and skills that have beeeb aqiured in it. Once again the core aim is to show how to calculate correct algorithms. We lay particular emphasis on constructing efficient solutions. We examine a collection of problems whose solutions exploit properties such as symmetry, monotonicity and operator distribution.