- Memoization / DP
- Divide and conquer
- Using a bounded approximate algorithm in place of an exponential one for NP complete problems
I feel like it would have taken me a lot of time to internalize those types of algorithms on the job, but seeing them presented in my algorithms class made it easy.
There is a line to be drawn somewhere tho - what is considered basic isn't basic to some. I would draw it where 'basic' means you could have learnt it in a 3 year undergrad CS course - essentially what is covered in the text http://mitpress.mit.edu/sicp/ would be all i need from a grad, and domain specific stuff can be trained on the job.
In my experience, people who don't have a formal computer science education, who haven't taken any classes (or at least worked through the material in their own time) in algorithms or data structures, will muddle through and _will get things done_. They may also shrug their shoulders when it comes time to scale up their dataset input and their code takes 6 days instead of 6 minutes.
When the person lacking this education finds himself in a three- or four-level deep "for (...) { for (...) { for (...) { ... } } }" structure, (I guess) he feels mildly uncomfortable and thinks "yeah this is going to take a long time".
When the person with this education finds himself there, he has at his (I hate to use the word, but: intuitive) disposal some ideas for reducing some of the necessary computation ("I can keep a min-heap instead of scanning the list to find the minimum every time."). He has a toolbox of algorithmic knowledge that helps him without him consciously knowing about it. Some people reduce the complexity as much as they can and are still not satisfied, causing them to restructure the larger program or try to invent a new algorithm for this particular problem.