Home Theory Algorithmic Paradigms – Brute Force

Algorithmic Paradigms – Brute Force

by nikoo28
0 comment

Brute force method would probably be the favorite algorithmic paradigm of every developer. The beauty of a brute force method is that it is pretty straightforward and if a solution to a problem exists, you are guaranteed to find it. This option is also the most exhaustive option as we might go through all the possibilities before arriving at the result.

What is Brute Force Method?

You might have heard the phrase “Brute force method to solve the problem”. What exactly do you mean by that? It simply means that try out all the alternatives until you are exhausted of options. If the problem is solvable, you will eventually find an answer.

fig showing representation of brute force method
Fig: Example of brute force attack

Let us understand it with a very easy example. Suppose you have a locked folder that can be opened by a 5-digit lock code. You have no hint about the lock code, but you just want to see what is behind that lock, what would you do? You would start from 00000 and go all the way to 99999. If the lock is working correctly, one of the combination would definitely open the lock. Although it would take some time, but eventually you would be able to solve the problem.

What you just did was a Brute force solution. On the other hand, if you have hints about who owns the folder, or what date was the folder created, you may be able to try out some known combinations first. That could be an optimized approach. Similarly, for problem solving skills in computer science, if a solution to a problem exists, it guaranteed, that you will find it by a brute force method, i.e. applying all the possible combinations.

What do we mean by “if a solution exists”?

In the above example you may have noticed words like, “if the lock is working correctly” and “if a solution exists“. This statement is very essential when approaching any problem. Let us try to understand what do we mean by this.

QUESTION: Given a 3 * 3 grid, you need to fill in numbers from 1-9 such that sum of all diagonals, rows and columns is the same. Also note that none of the numbers should be repeated.

empty 3 by 3 grid
Fig: 3 * 3 grid to be filled with numbers 1-9

We also call it the magic square problem. Now you have to approach this problem in a brute force manner. You can start of by trying numbers in any fashion, and keep on verifying the sum in all directions.

image showing different examples of 3 by 3 grid
Fig: Trying out different combinations in 3 * 3 grid

Eventually you will reach the correct answer. It is shown in the figure below. The sum of every row, column and diagonal is equal to 15 in this combination of numbers. Because a solution to this problem existed, we were able to find it in a brute force manner. But do keep in mind that the brute force method to solve this problem could be very time taking. There are a total of 362880 total possible ways to fill up the grid.

3 by 3 grid solved
Fig: 3 * 3 grid solution

Important! Let us try to change the question a little bit. Instead of a 3 * 3 grid, what if you have a 2 * 2 grid? You need to fill the grid with numbers 1-4 such that no numbers are repeated. No matter what combination you try, you can never reach a condition where the sum of all rows, diagonals and columns is the same.

figure showing all possibilities of 2 by 2 grid
Fig: Examples of 2 * 2 grid combinations

This means that the solution to this problem does not exist. Hence, even a brute force approach would be unsuccessful.

Summary:

This is what makes the brute force paradigm so popular and one of the favorites. It gives a sure shot way to determine if a problem is solvable. Usually developers try to approach the problem with a brute force approach first, if you are able to verify that a solution exists, only then you go ahead and try to optimize it.

You can have a look at some of the problems where we discuss a brute force method first, before we start to optimize the solution:

Video Explanation:
0 comment

You may also like

Enclose codes in [code lang="JAVA"] [/code] tags

This site uses Akismet to reduce spam. Learn how your comment data is processed.

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More