Jeff Erickson, computer science professor at the University of Illinois Urbana-Champaign and a stalwart of the field, presents an accurate & quite holistic definition in his book on algorithms, aptly named Algorithms.
“An algorithm is an explicit, precise, unambiguous, mechanically executable sequence of elementary instructions, usually intended to accomplish a specific purpose.”
Algorithms are akin to recipes for preparing some dish or instructions for doing any task. Almost every electronic device that manipulates data has some underlying algorithms that define system operations and behaviour. Designing algorithms is a critical aspect of system design, irrespective of the nature of the system.
If you wish to be a master at algorithm design, then one of the first things necessary is to think algorithmically. It would be best if you had a good idea about what you wish to achieve, the resources you have available, and any & all constraints. These are the preliminaries that will determine the nature of the algorithm you will design.
Once you are clear on the above, it is time to think about four key aspects of the algorithm design 🡪 What- a precise specification of the problem that the algorithm will solve, How- a precise description of the algorithm itself, Why – a proof that the algorithm is able to solve the problem it’s been designed for, and How Fast – an analysis of the running time or how quickly the algorithm does perfectly what it’s supposed to do.
Let’s take a closer look at the concept of algorithms with a look at the ones powering one of today’s most potent & popular technologies, machine learning.