First we have to know what is an algorithm:

It consists of instructions which are of finite set and those performs operations which are to carried out for solving the problems or a collection of problems is known an algorithm. To know more about Backtracking Algorithm, keep reading this article till the end. Also I have given the download link of Backtracking Algorithm PDF below. You can Download and share with your friends and classmate.

## Why do we need to study an algorithm?

Performance of the system becomes less as the speed of the processor increasing. Performance is an important factor in larger problems which are of bigger size. Longer computation time will give slower results and computation cost will be high because of that. So study of algorithm will give the information about performance as the important factor of size of the problem.

Algorithm characteristics are:

Input: algorithm should give 0 or more quantities of inputs.

Output: it should give atleast one output.

Definiteness: the instructions should be ambiguous and clear.

Finiteness: after execution of finite steps an algorithm should be terminated.

Effectiveness: instructions should be fundamental and effective.

Feasibilility : algorithm should be feasible to give each and every instruction.

Flexibility: algorithm should be flexible and should carry needed changes having no efforts.

Efficient: an algorithm should take very less time and also less memory for executing the program because the time and space is measured in terms of efficiency.

Independent: an algorithm should not be dependent on the language, it should only concentrate on the input procedure which is useful to bring the output and it should not depend on the language.

Communication is effective: an algorithm is written in English, it will be easier for people to understand the process step by step and can be able to find the solution for the program.

Easy debugging: easy debugging will be there in well designed algorithm and it should be able to detect the errors which are inside the program.

Easy and efficient coding: algorithm is useful in developing the program.

Independent of programming language: algorithm should be independent of a programming language , it will become easier to code in any high level language.

It may be time consuming to develop algorithms for very big problems.

If the algorithm has complex logic then it will be difficult to understand them.

What is a pseudocode?

It is an higher level description which is informal of the program or an algorithm which has operating principles. It will have standard programming language which is helpful for the humans to read rather than machine reading.

It can be transformed into programming language that is actual and it is similar to a programming language.

It is understandable by a layman.

It can be modifiable easily as flowcharts

The implementation of pseudocode is useful for structured and designed elements.

It can detect an error very easily before it is transformed into a code format.

It can be different from one to another company as it is not incorporated with a style or format that is standardized.

While we transform the code the possibility of errors occurring will be high.

For the pseudocode to be extracted out, it will need a tool and it will draw the flowcharts.

It will not be useful for depicting the design.

What is the difference between pseudocode and algorithm?

An algorithm is useful not only in programs or computer systems but they are also useful in our daily life tasks to perform any functions and operations like mathematics and science. It consists of set of instructions which are useful for solving the problems, it will give a better understanding not only the solution for the problem.

Pseudocode means it’s a way of writing the algorithm, any infomal and simple language can be used by any programmer without using the syntax.

Algorithm’s complexity:

Complexity tells us, To solve the given problem, it will determine how many steps will be needed. it will evaluate ow many operations count order that an algorithm executes.

The count of operation order is considered to get the complexity rather than counting the steps exactly.

O(f) will represent the algorithm’s complexity, also known as big-o-notation or asymptotic notation. F means function it has same size as that of input data size. It will determine the resources like CPU time and memory, in which order the resources are taken by the algorithm.

An algorithmic technique is backtracking it is useful for solving the issues in a recursive manner and it tries to create the solution one by one, like one piece at a time. And it also removes the solutions which don’t give the proper result which don’t satisfy the constraints that re given on time.

Let us consider an example: game sudoku is there it also consists of solving the problem in this game we will be filling the numbers one after the other by finding out which one seems right. So if we find a digit is not leading to the solution, we will just remove it which means we perform backtracking and we will go for the next digit.

Naïve approach is not good comparing to this backtracking technique. In this backtracking technique we will consider and search for all the combinations possible which are useful for getting the computational problems.

Backtracking consists of 3 types of problems:

1.Decision problem

2. Optimization problem

3. Enumeration problem

In decision problem we will be usually searching for solution that is feasible.

In optimization problem, we will be searching for only the best solution.

In enumeration problem, we will try to find the solutions that are feasible.

How do we know that a problem can be solved using backtracking algorithm?

The constraint satisfaction problem will build candidates to the solutions and removes the candidates If it identifies that the candidate is not suitable for the problem and not giving correct solution. And this problem can be overcome by using backtracking. Many problems can also be solved using algorithms like dynamic programming, greedy algorithms in linear and logarithmic complexity of time, but  still we use backtracking because it is efficient at both time and space.

Let us consider an example, we have given three boxes and only one box has gold in it and you don’t know which box has the gold. So to know which box has the gold coin you have to open each and every box one by one. First you will go with first box and if u don’t find gold coin in it, you will go with second one and you will continue till you find the gold one in one box. This is backtracking we will solve all the sub-problems one after the other to have the best possible solution.

Let us understand another example for backtracking:

Let us consider a computational problem P, and that has data D which has an instance. C is represented by the constraints that satisfy all the instances of the problem. Then backtracking algorithm will work :

This algorithm will be ready to create a solution first it has empty solution. With set S={}.

1.Adding to S left is the first move and all the possible moves are added to S like one after the other, now a new sub tree will be created in the algorithm of a search tree.

S+s is satisfied with each constraint or not, keep a check on it.

If it is satisfied then sub tree S is given eligible and we can add more children

If not, S sub- tree will become useless, so it will recur back to the first step by using argument S.

As there is eligibility for the newly formed sub tree S, it will recur back to first step, by suing the argument S+s.

S+s will output and terminates the program if there is a check on it and also on the whole data D. if not, it will return that there is no solution for the present s and it will discard it.

Backtracking algorithm:

We have to place the queens one after the other in different columns, we have to start from leftmost column. When the queen is placed in a column we have check if there are any clashes with already placed queens. If we have a row in which there are no clashes, In the present column, we have to take that row and column as solution’s part. And if we don’t have a row like that because of clashes then we have to backtrack and say it is false.