+1  A: 

When you have unlimited funds, you can spend quite a bit of time writing tracking algorithms that record what users enter and examine every detail of their behavior. When a user makes a mistake, they usually correct the mistake. A second consecutive submission tells google what the user meant, and future users can be offered the final resting place results. Google will take similarities from all users and compile a reference tree in the most logical way.

Were you looking for code to do this on your own site? Good luck finding that.

You could look into the Levenshtein distance algorithm and see if you can use that to compile your own list of words and relations.

fleces
A: 

Statistical language processing, with tweaks from actual data.

A simple sample that gets to 80 or 90% precision (and the explanation about how it all works) can be found at: http://norvig.com/spell-correct.html

Vinko Vrsalovic
A: 

I don't know if Google uses this particular data structure, but one way to do this sort of "fuzzy matching" is with a Burkhard-Keller Tree (BK-Tree).

pelotom