I'm trying to introduce a friend to competitive programming. He is an engineering student who enjoys the sort of problems we have here on Codeforces, but he did not study CS and is lacking a lot of the basics most of us take for granted. He knows how to program (in Python) but doesn't know a lot of the algorithms 101 topics, such as a strong grasp of computational complexity, sorting algorithms, or even some basic data structures like hashtables and binary trees.
I know some good texts that can help those who have this fundamental knowledge (primarily Laaksonen's book), but what's the best way to introduce someone who lacks any formal CS education?