Algorithms are fu**ing awesome!

If you have a quick look on Wikipedia you’ll find out that algorithms are procedures used to solve calculations and to process data.

When I was in university, one of my teacher has defined them like a receipt. Imagine that you have got dozens of ingredients. You have to mix them in order to obtain something that’s really tasty and that can be considered eatable.

From a certain point of view that’s true. Isn’t it? 🙂

One thing that takes a little bit of attention is the fact that the ingredients have to be selected and manipulated following particular procedures otherwise you’ll obtain a food that it something “similar” to what you are expecting.

One week ago, I was reading a problem on Codility that at the beginning was appearing really… really… EASY PEASY!
That’s the greatest mistake that you can do! It doesn’t exist a problem that is simple… otherwise it’s not a problem 😉

After that assumption, I tried on my favorite editor to solve the problem and it “was failing some tests” (if it doesn’t cover any case it’s wrong).
I misunderstood the fact that my solution wasn’t considering entirely the input.

Hence I decided to focus on the velocity of the execution because maybe some loops + if statements were speed down the execution.
That’s another problem: don’t focus on velocity at the beginning. You’ll incur in a lot of mistakes and the problem will become more complex than expected.

At that point I decided to drink a huge cup of strong Italian coffee. “What am I doing?!?!? That’s not the way!”
This was not the idea that solves all your problems but a kind of ray that was saying me that I should start to think instead of trying a feasible solution .

At the end that’s the result:

Detected time complexity: O(N * M * log(M) + N * log(N))
Score: 100 of 100

…getting back to my teacher’s words, when you are sure that your solution works, you should start to think “Can I do something more?“.

Most of the time the solution is YES! OF COURSE!

Leaving that’s long and boring introduction I think that algorithms are not only a way to solve problems but a tool that allows us, not only geeks or nerds, to find other possible better solutions or to confirm that our one is the best one.
So, if you have a look at the icon, that is taken by the Princeton website, you should consider the opportunity to think a problem as something that has to be solved through organized iterations not only as an intuition.

Advertisements

Posted on August 9, 2013, in Thoughts and tagged , , , , , , , , , , , , . Bookmark the permalink. Leave a comment.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: