As tech companies continue to explain their business with buzzwords like AI, machine learning, supercomputers, cloud computing and quantum computing, there is a word that binds them all algorithm. An algorithm can be described as a series of instructions that help computers understand how to transform a set of facts into useful information.

**Definition and basics**

An algorithm is a set of “rules that must be followed when solving a particular problem”. In mathematics and computer science, an algorithm is essentially a finite set of well-defined instructions that are used to solve a set of specific problems or to perform a computation. An algorithm is also different from the entire program or code.

It can be understood as a simple logic required to solve a problem represented as an informal description and is often depicted in the form of a flowchart. An input is the necessary information fed to the algorithm while the output is the outcome or the result of the program. Algorithm takes the input and runs through a processing unit consisting of a step-by-step process to solve the problem.

To understand the concept of an algorithm, we can think of it as a cooking recipe. In order to cook a recipe, one needs to read the instructions and steps, and execute them one by one in the prescribed sequence. If followed properly, the result is a perfectly cooked dish. An algorithm, like the cooking recipe, is a set of plain instructions that is language-independent and produces an expected output.

## Characteristics of an algorithm

An algorithm is required to solve a problem because it helps with scalability. With an algorithm, you can break down a real-world problem into smaller steps to analyse it quickly. An algorithm also helps you understand whether it would be feasible to solve the problem in the first place. While an algorithm can vary depending on the problem you are trying to solve, the characteristics remain the same.

- Input: This can be dubbed as the starting point of any algorithm which requires some kind of input values. This value can be anything other than 0 to get started.
- Output: Every algorithm will conclude with an outcome or a result that is called output.
- Unambiguity: A well defined algorithm is one that has instructions that are clear to understand and straightforward to implement, making it unambiguous in nature.
- Finiteness: An algorithm must be finite for it to deliver an outcome. By finite, an algorithm is expected to have a limited number of instructions or instructions that can be counted.
- Effectiveness: Since each instruction directly affects an algorithm, it is essential that the information is adequate to process and effective to deliver a result.
- Language-independent: An algorithm should be language-independent, meaning that the instructions can be implemented in any language without altering the end result.

## Algorithms in computer science

A computer science programmer is expected to employ five basic parts of an algorithm to create a successful program. These five basic parts are as follows:

- Describe the problem in mathematical terms
- Write the formulas and processes required to achieve the result
- Input the outcome parameters
- Repeatedly execute the program to test for its efficiency and accuracy
- The conclusion of the algorithm is the result after a parameter goes through a set of instructions specified in the program.

Sometimes, a computer programmer might design their algorithms to be more complex so that the program takes in more data and the software runs multiple assessments to reach any conclusion. While many algorithms are written to solve one problem, there are some that simplify the process better than others.

## Analysis of an algorithm

An algorithm can be analysed at two levels: before and after it is created. These analyses are called Priori analysis and posterior analysis.

- Priori analysis: Priori (Latin) means ‘from before’ and priori analysis means checking the algorithm before it is implemented. This process requires the programmer to check the algorithm when it is in the form of theoretical steps. In other words, this analysis is akin to checking each and every step of instruction that makes the algorithm and the result is often described with an algorithm complexity.
- Posterior analysis: In the case of posterior analysis, the algorithm is checked after it is implemented. This is done by implementing the algorithm in any programming language and executing it. This results in understanding the accuracy of the algorithm, time consumed and space required to implement the program.

## Approaches of an algorithm

An algorithm acts as the foundational block to solving a problem and writing a program that will result in a solution. However, there are many standard approaches towards designing an algorithm and these are dependent on the design and analysis of the algorithm. Some of the standard approaches are:

- Brute force technique: This is the most widely accepted and simplest way to design an algorithm. Also called an Exhaustive search algorithm, this involves a direct logic-based structure to design an algorithm.
- Divide and conquer approach: This approach relies on dividing the problem into smaller sub-problems and solving those sub-problems individually. Once all the sub-problems are solved, the solutions of those subproblems are combined to reach the final solution.
- Greedy method: The greedy method is an approach where the algorithm makes optimal choices at every step of the way to get the best possible solution.
- Dynamic programming: This approach stores intermediate results to improve the efficiency of an algorithm. This is a recursion-based optimisation algorithm, where the results of sub-problems are stored to ensure that there is no need for recomputing those sub-problems.
- Randomised algorithm: This approach relies on use of random numbers to decide the next step in the algorithm. There is a certain degree of randomness in its logic and this is done to reduce the complexity of the algorithm over other standard algorithms.
- Backtracking: With backtracking, the programmer looks for every possible combination for solving a computational problem. While designing the algorithm, all those sub-solutions that don’t satisfy the constraints of the problem are removed.
- Branch and bound: This is an optimisation approach used to solve “combinatory, discrete and general mathematical problems.” The approach requires dividing the problem, obtaining sub-solutions for them and then finding the most optimal solution.

## Machine learning algorithms

Machine learning is arguably the most popular algorithm in the world of computing. When it is too complicated to spell out step-by-step instructions to reach a decision, machine learning algorithms are used as a special category of algorithms.

These algorithms try to learn based on a set of past decision-making examples. This ability to learn based on past examples makes them ideal for things like recommendations, predictions and looking up information.

While algorithms by nature remain a simple concept, they are one of those fundamental blocks that make up every piece of technology.