Algorithm: Working with algorithms
Algorithm: Working with Algorithms
Introduction to Algorithms
-
An algorithm is a well-defined sequence of steps or instructions designed to perform a specific task or solve a particular problem.
-
Each step in an algorithm is precise and unambiguous, following a logical order. An algorithm should always produce an output, given a valid set of inputs.
-
Algorithms are widely used in problem-solving scenarios in mathematics, computer science, engineering and more.
Characteristics of Algorithms
-
Definiteness: Every step in an algorithm is clear and unambiguous.
-
Finiteness: The algorithm terminates after a finite time.
-
Input: An algorithm has zero or more well-defined inputs.
-
Output: An algorithm produces one or more outputs.
-
Effectiveness: An algorithm should be simple, generic and practical so that it can deal with all problem instances.
Designing Algorithms
-
Divide and conquer: A problem is divided into smaller sub-problems until they can be solved directly. The solutions to the sub-problems are then combined to give a solution to the original problem.
-
Dynamic programming: This methodology is similar to divide and conquer. However, sub-problem solutions are remembered to avoid multiple calculations of the same sub-problem.
-
Greedy method: This involves building up a solution to the problem by always choosing the next step that offers the most immediate benefit or profit.
-
Backtracking: This approach is used when the problem involves searching a large solution space. It systematically explores all paths in the solution space.
Algorithm Complexity
-
The time complexity of an algorithm quantifies the amount of time taken by the algorithm to run, as a function of the length of the input. It’s usually expressed using Big O notation.
-
The space complexity of an algorithm quantifies the amount of space or memory taken by an algorithm to run, as a function of the length of the input.
-
In general, the goal is to choose or design algorithms with acceptable time and space requirements.
Pseudocode and Flowcharts
-
Pseudocode is a high-level description of an algorithm. It uses the structural conventions of a programming language but is intended for human reading rather than machine reading.
-
A flowchart is a type of diagram that represents an algorithm or process, showing the steps as boxes of various kinds, and their order by connecting these with arrows.
-
Both pseudocode and flowcharts are useful tools for designing, understanding and communicating algorithms.