# Intro

An algorithm is any structured procedure for solving a problem. Everything that you do with a computer relies in some way on an algorithm, even the simplest application would not be possible without algorithms being utilized behind the scenes to manage the information.

In fact, computer programs (even the most advanced Artificial Intelligence)
are only a bunch of
algorithms slapped together with some fancy structured data.
That's it: **Algorithms + Data Structures = Programs.**

Algorithms define how to operate, what to do exactly to solve a problem.
**Learning algorithms does not require you to know any programming language**;
it only requires you to have an understanding of the steps that are involved.
If we relate it to mathematics or physic, then it means solving an
equation step by step with a recipe (e.g.
Robot Resolving 1st order equation).

Algorithms are independent of the programming languages used (algorithms remain the same,
only the syntax may change).
**It is however highly recommanded to know one if you want implement your
own algorithms and see them running**.

## Why are algorithms so important?

Different kinds of algorithms solve different kinds of problems.
Without understanding them, it's almost impossible to see things from higher perspective.

Similarly, one can't build a bridge by just placing brick after another.

There has to be deeper understanding of what one is doing,
what problem are solving and why is it done this way.

In context of computing, programming or just to see what is going on inside
all your electronical devices, understanding algorithms gives you a deep vision.
Understanding the details of the algorithms involved gives you the ability to predict
if there are special cases in which it wonâ€™t work quickly or produce unacceptable results.
**Understanding algorithms is a requirement to handle program accuracy and speed**.

Of course, you will also run across problems that has not been resolved yet.
In these cases, you have to come up with a new algorithm, or apply an old algorithm in a new way.
**The more you know about algorithms in this case,
the better your chances are of finding a good way to solve the problem.**
In many cases, a new problem can be reduced to an old problem without too much effort,
but you still need to have a fundamental understanding of the old problems.

By developing a good understanding of a large range of algorithms,
you will be able to choose the right one for a problem and apply it properly.
Furthermore, solving problems like those will help you to hone your skills in this respect.
Many of the problems, **though they may not seem realistic,
require the same set of algorithmic knowledge that comes up every day in the real world**.

## Don't spend any time memorizing algorithms

That's not the point: **instead, try to understand how different algorithms approach
different problems**. Learn about techniques such as recursion, divide-and-conquer,
dynamic programming, graph-theory, complexity...
See what makes one approach slow while the other is fast and learn what the tradeoffs are.

**The key is to get insight in how we can make computers do things.**

## Algorithms are way easier to understand than you can imagine

Algorithms are almost always associated to mathematics and all the obscurantisme it inspires. The math is useful but you won't need it most of the time. You won't need to handle mathematics or master programming to understand all these fancy algorithms and data structures.

Using the H.urna Explorer in association with this wiki will give you a fun highway to visualize and understand all the algorithms listed below.