Which of the following is a step by step process of solving a well-defined computational problem?

An algorithm is a well-defined sequential computational technique that accepts a value or a collection of values as input and produces the 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 does the manufacturer set those nuts and bolts so that it keeps on moving every 60 seconds, the min hand should move and 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.

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 solutions to problems like finding the shortest path between cities, and real-life problems like traveling salesman problems.

Why do we use algorithms?

Consider two kids, Aman and Rohan, solving the Rubik’s Cube. Aman knows how to solve it in a definite number of steps. On the other hand, Rohan 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 must stop or end after a finite number of steps.
  • In an algorithm, step-by-step instructions should be supplied, and they should be independent of any computer code.

Example: 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 logic

We 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 output, Here 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.
Follow the algorithm approach as below:

Step 1: Start the Program
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 of Solution

Example 2: Write an algorithm to find the average of 3 subjects. 
Follow the algorithm approach as below:

Step 1: Start the Program
Step 2: Declare and Read 3 Subject, let’s say S1, S2, S3
Step 3: Calculate the sum of all the 3 Subject values and store result in Sum variable (Sum = S1+S2+S3)
Step 4: Divide Sum by 3 and assign it to Average variable. (Average = Sum/3)
Step 5: Print the value of Average of 3 Subjects
Step 6: End of Solution

Know about Algorithm Complexity:

An algorithm is analyzed using Time Complexity and Space Complexity. Writing an efficient algorithm help to consume the minimum amount of time for processing the logic. For 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.