4 ms·
There is a flaw in this program and in many coursera courses about algorithms and data structures. Although, you can relatively quickly grasp all basic algorit
by hal9000xp 10y ago
There is a flaw in this program and in many coursera courses about algorithms and data structures.
Although, you can relatively quickly grasp all basic algorithms and data structures, you most definitely can not quickly build up skills of recognizing these algorithms in problems (which is most valuable skill and most overlooked).
Another problem is that you also forget these algorithms pretty quickly and can't implement them after a few months.
I was on and off in algorithms since 2014 and already experienced these problems during last two years.
Now, I took another route which is much slower but now, I can remember, recognize and implement some algorithms after a few months.
I started to participate in algorithm contests, mainly on CodeForces, sometimes on HackerRank. Often these problems cover pretty narrow topics and what you can learn in two months on Coursera, on CodeForces you can learn in one year or even more.
Why algorithm competitions is useful? When you stuck on the problem for a while, then you read solution and you see that this problem is solved [for example] by Dijkstra algorithm, you remember this algorithm for a while. If you stuck on another problem, and then after reading solution you discover Dijkstra algorithm again. You remember this algorithm for very long time (provided you put significant effort to solve the problem). That's because your brain connects Dijkstra algorithm with some important problem because you are frustrated solving this problem during contest. So frustration is actually good for memorization! (if used correctly).
So there are 3 aspects which you should develop together in order to achieve really good results:
1. Implementation skills;
2. Problem solving skills (i.e. how you recognize algorithm in the problem);
3. Knowledge of algorithms, data structures, paradigms (like dynamic programming, greedy etc);
Often courses covers only third aspect.
Here is my description of CodeForces problems difficulty and relevant skills they develop:
Div2 A - trivial implementation problem, train accuracy;
Div2 B - little tricky but still trivial problem, find little things to solve the problem;
Div2 C - sometimes easy, but sometimes really hard to solve, covers topics: combinatorics, dynamic programming, greedy, elementary graph algorithms etc;
Div2 D - usually hard to solve, but can cover classical algorithms like Dijkstra, Kruskal's, binary indexed trees etc;
Div2 E - very hard to solve, way above my current level (the same applied to Div1 problems);
If you can solve Div2 C problems consistently within 15 minutes and sometimes solve D problem within 30-45 minutes, you will crush Google interview (at least their algorithms + data structures part, which is where most people stuck!).
- gniv 10y agoI wish your comment were higher up. It does indeed take time to internalize how to use these data structures, and that's what the interviews usually test.