1. Introduction
An important class of algorithms in computer science deals with this question:
If there are a several ways to arrive at a goal, and there are choices to be made along the way, what are the best set of choices and how do we find that optimal solution?
This is called a path-finding problem and it happens in many fields. For example:
- Navigation. What is the best path to get from A to B along a transport network
 - The internet. What is the most efficient route to get a packet of data to its destination
 - Speech recognition - a computer needs to parse a spoken command with many possibilities
 - Image recognition - being able to classify/recognise an image from a huge set of possibilities
 - Artificial Intelligence - training neural nets to work out an optimal strategy e.g playing chess
 - Robotics 2D - controlling their path from A to B
 - Robotics 3D - finding the optimal path for a robotic arm to move in 3D space
 - Gaming - path finding and NPC control in game worlds
 - Finance - help make optimal investment choices
 - Military - unmanned drones can use it to plan a route without external commands
 - Social network analysis - friendship networks, influencers, meme propagation
 
For this syllabus, two popular algorithms will be covered namely the Dijkstra's algorithm and the A* algorithm

