What It Really Means to be good?
Getting good at algorithms boils down to one thing - knowing common tricks to solve problems.
You will face a wide swathe of problems in the big bad world out there. Not all of them will have a clear cut solution.
Coming up with algorithmic solutions is not like solving algebra where there is a clear process to be followed. You cannot follow some procedure to crank out a O(nlogn) solution to any problem.
The ingenious solutions that we currently have mostly come out of nowhere - someone who is spending not lot of their time to solve these specific algorithmic riddles cannot intuit the solution to these problems, such as you when you are in the receiving end of these questions in an interview.
Getting good at algorithms mostly seems to involve knowing as many of these techniques as possible and adapting one or more of them to new problems. But that will only take you so far. That will take you somewhere provided that these problems are developed around the explicit requirement that these specific problems be applied.
Failing that, the only solution that can be applied in a moment's notice is INDEED the one that involves brute force - the one that is the most straightforward one. Spending some time on the problem may open up opportunities to apply one of these algorithms or techniques to the problem at hand. But that may or may not happen.
I have been following the algorithms course on coursera the past two weeks. It has been quite a journey.
I find that the instructors are teaching me specific algorithms - karatsuba, merge sort, etc., in a specific context though it may be, they are not providing me with a framework of thought that will allow me to crack most problems in a divide and conquer method.
Perhaps every problem cannot be solved in a divide and conquer paradigm. Perhaps one will only realize and notice patterns once one is able to practice these problems.
I realize that I lost my way along the way becuase I made the following mistakes:
- I bit off more than I can chew comfortably. I signed up for more than one algorithms course. This leaves me scrambling to go through both of the courses which seem to be going in different directions in covering the content.
- I am not able to get a chance to cover the offline material - the books and ebooks that I have on the subject - CLRS, Dasgupta, and the other one. I was hoping to get a full spectrum of perspectives on the subject. I was especially hoping to solve the problems in the end of the chapters of these books.
From the looks of it, being good at algorithms may just be a factor of knowing a lot of techniques and algorithms and being able to apply them in the right context.
A short one for today.
I thought hard about developing a study plan for the algorithms material that I have collected. I realized that I am putting way too much effort into perfecting this when the people who made the coursera course in stanford have thought this through already for their students. I don't want to needlessly complicate and slow down my progress by thinking this through.
This is especially hard given that I don't yet have a hold on the concepts in this course.
I have decided to stick to the plan in coursera and use the other material as supplemental study material that will give a wider pespective to my study of any given topic.