3.1 Fundamentals of algorithms