# What is an Algorithm? Definition, Types, Complexity, Examples

An algorithm is a well-defined sequential computational technique that accepts a value or a collection of values as input and produces output(s) needed to solve a problem. Or we can say that an algorithm is said to be accurate if and only if it stops with the proper output for each input instance. Consider a box where no one can see what’s happening inside; we say a black box. We give input to the box and it gives us the output we need but the procedure that we might need to know behind the conversion of input to desired output is an ALGORITHM. An algorithm is independent of the language used. It tells the programmer the logic used to solve the problem. So, it is a logical step-by-step procedure that acts as a blueprint to programmers.

**Real-life examples that define the use of algorithms:**

- Consider a clock. We know the clock is ticking but how the manufacturer sets those nuts and bolts so that it keeps on moving and with every 60 seconds, the min hand should move and with every 60 mins, the hour hand should move. So to solve this problem, there must be an algorithm behind it.
- Seen someone cooking your favorite food for you? Is the recipe necessary for it? Yes, it is necessary as a recipe is a sequential procedure that turns a raw potato into a chilly potato. This is what an algorithm is: following a procedure to get the desired output. Is the sequence necessary to be followed? Yes, the sequence is the most important thing that has to be followed to get what we want as we know WYWIWYG (What you want is what you get).

**Types of Algorithms:**

**Sorting algorithms:**Bubble Sort, insertion sort, and many more. These algorithms are used to sort the data in a particular format.**Searching algorithms:**Linear search, binary search, etc. These algorithms are used in finding a value or record that the user demands.**Graph Algorithms**: It is used to find the solutions of problems like finding the shortest path between cities, real-life problems like traveling salesman problems.

**Why do we use algorithms?**

Consider two kids, Aman and Rohon, solving the Rubik’s Cube. Aman knows how to solve it in a definite number of steps. On the other hand, Rohon knows that he will do it but is not aware of the procedure. Aman solves the cube within 2 minutes whereas Rohan is still stuck and by the end of the day, he somehow managed to solve it (might have cheated as the procedure is necessary). So the time required to solve with a procedure/algorithm is much more effective than that without any procedure. Hence the need for an algorithm is a must. In terms of designing a solution to an IT problem, computers are fast but not infinitely fast. The memory may be inexpensive but not free. So, computing time is therefore a bounded resource and so is the space in memory. So we should use these resources wisely and algorithms that are efficient in terms of time and space will help you do so.

### Creating an Algorithm

Since the algorithm is language independent, we write the steps to demonstrate the logic behind the solution to be used for solving a problem. But before writing an algorithm, keep the following points in mind:

- The algorithm should be clear and unambiguous.
- There should be 0 or more well-defined inputs in an algorithm.
- An algorithm must produce one or more well-defined outputs that are equivalent to the desired output. After a specific number of steps, algorithms must ground to a halt.
- Algorithms
- In an algorithm, step-by-step instructions should be supplied, and they should be independent of any computer code.

Here the task is to write an algorithm to multiply 2 numbers and print the result:

Step 1:Start

Step 2:Get the knowledge of input.Here we need 3 variables; a and b will be the user input and c will hold the result.

Step 3:Declare a, b, c variables.

Step 4:Take input for a and b variable from the user.

Step 5:Know the problem and find the solution using operators, data structures and logicWe need to multiply a and b variables so we use * operator and assign the result to c.

That is c <- a * b

Step 6:Check how to give outputHere we need to print the output. So write print c

Step 7:End

**Example 1: Write an algorithm to find the maximum of all the elements present in the array.**

**Solution:**

Step 1: Start

Step 2: Declare a variable max with the value of the first element of the array.

Step 3: Compare max with other elements using loop.

Step 4: If max < array element value, change max to new max.

Step 5: If no element is left, return or print max otherwise goto step 3.

Step 6: End

**Example 2: Write an algorithm to find the average of 6 subjects.**

**Solution:**

Step 1: Start

Step 2: Declare a variable sum with value 0.

Step 3: Get the sum of all the values in sum variable using loop.

Step 4: Divide sum by 6 and assign it to avg variable.

Step 5: Print avg

Step 6: End

### Algorithm complexity

For an algorithm A, it is judged on the basis of two parameters for an input of size n :

**Time Complexity:**Time taken by the algorithm to solve the problem. It is measured by calculating the iteration of loops, number of comparisons etc.**Space Complexity:**Space taken by the algorithm to solve the problem. It includes space used by necessary input variables and any extra space (excluding the space taken by inputs) that is used by the algorithm. For example, if we use a hash table (a kind of data structure), we need an array to store values so this is an extra space occupied, hence will count towards the space complexity of the algorithm. This extra space is known as Auxiliary Space.

### Advantages of Algorithms

**Easy to understand:**Since it is a stepwise representation of a solution to a given problem, it is easy to understand.**Language independent:**It is not dependent on any programming language, so it can easily be understood by anyone.**Debug / Error Finding:**Every step is independent / in a flow so it will be easy to spot and fix the error.**Sub-Problems:**It is written in a flow so now the programmer can divide the tasks which makes them easier to code.

### Disadvantages of Algorithms

- Creating efficient algorithms is time-consuming and requires good logical skills.
- Nasty to show branching and looping in algorithms.