# Why Algorithms?

• 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 IA) are only a bunch of algorithms slapped together with some fancy structured data. That’s it:

Algorithms + Data Structures = Programs

Algorithms
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. Algorithm means finding the solution for any problem step by step. So, if we relate it to mathematics or physic, then it means solving an equation step by step with a recipe.

For instance, we want to get the number of seconds within some minutes. The algorithm (receipt) will simply be:
#minutes x 60 --> #seconds

Algorithms are independent of the programming languages used (algorithms remain the same, only the syntax may change); it is however highly recommended 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, it is important to understand how the algorithm solves the problem; 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. Learning Algorithms
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 Hurna Explorer will give you a fun highway to visualize and understand the algorithms listed below.

Fractal Generator
Lindenmayer System

Maze Generator
Binary Tree
Depth First Seach (DFS)
Kruskal’s
Prim’s
Recursive Division
Sidewinder

Search
Binary
K’th order statistic (QuickSelect)

Sort
Aggregate (In Place)
Bubble
Cocktail
Comb
Merge (In Place)
Partition-Exchange
Quick (Simple)

| |