I was pretty good with algorithms and data structures once, a long long time ago. Since then, I programmed professionally, and then went to manage a small team, which totally shot my tech skills in this field back.

I've decided I want to be a developer again, and work for Google. The thing is, I'm so out of practice, that if I were to be interviewed right now I would surely flunk out in 10 minutes.

What training program would you recommend for me to get back into shape? I already started this weekend by going back to the absolute basics and implementing a few sort algorithms, linked list, and hash table. Next, I think I'll read through the entire course material on the other basic data structures and graph algorithms. I want to find a focused set of practical exercises I can do in a relatively short amount of time, to juggle the old brain cells. I know this stuff - I just need to remind myself that I know it.

  • @Anon: If this is a new way Google's creating a buzz about itself this new year, there's one thing I'd want to say. It works. – Fanatic23 Jan 2 '11 at 11:57
  • 4
    If your data structures were hibernated, they most likely were serialized. You just need to unserialize them. – Mchl Jan 2 '11 at 11:59
  • 4
    @Mchl - I don't know about Anon, but I've found that the "brain" storage medium is even less reliable in the long term than floppy disks. Anything serialized more than a few years ago is almost certainly corrupted by now. – Steve314 Jan 2 '11 at 12:48

There are 4 things I'd want to tell you, and I have listed down the order I need to tell you those:

  1. Get your own source of green tea while you are at this
  2. While you are sipping that green tea, go through Skiena's book available from here. And go through the audio/video material here.
  3. Check out an excellent set of links maintained by Google at http://code.google.com/edu/courses.html
  4. Go through algorithms related questions at SO and try answering these on your own

Best of luck!

  • While I love the book from skiena, never knew that there was a audio/video material , thanks. – flash Mar 8 '13 at 9:48

I'd suggest picking a real data structure or file format that people are using right now, and do something cool with it. The Git file format is pretty well documented for instance:


Doing something interesting with a format people use, and being rigorous about it, teaches lessons -and- gives you something people will be interested in.

Or at the very least, make something with a unique angle. When I was in a position similar to yours, I wrote an answer to an online interview question about making a unidirected graph that could detect the insertion of cycles. It would have been an easy problem if I hadn't added extra constraints... but I decided to require that it could do insertions in O(1). The result was NoCycle:



This depends on exactly what your goal is - e.g. are is algorithm design and analysis in there, or are you sticking with the standard structures and algorithms? But it sounds to me as if you're already doing what you need to do.

If you still have an old favorite text book from "a long long time ago", I suggest revisiting that. Beyond that, it's the standard revisiting-anything advice. Ask yourself specific questions, look for the answers, when you run out of questions skim and browse quickly through whatever you can find until you can come up with some more specific questions.

Algorithms and Data Structures (Niklaus Wirth) is a relatively concise book on basic algorithms and data structures without all the algorithm design and analysis. Very basic, though - lists, various trees, heaps, but I don't remember about digraphs for example. One advantage is that there's a free download of the Oberon version - http://www.inf.ethz.ch/personal/wirth/ - look for the PDF link near the bottom of the books list. Wikipedia is an obvious resource, but has so much that it's a good idea to decide what you want and what you don't before you go there.


When you used to be pretty good with algorithms and data structures, what were the resources you accessed?

How short is the "relatively short amount of time" you need to brush up your knowledge?

I don't think knowledge that is gained with dedication will ever vanish. It will only fade away a bit, and YOU are the best judge of which areas you need to work on to regain your old prowess with the subjects you once loved.