I might be weird, but after writing a piece of code which gave me trouble, I tend to read it over and over again, sometimes even a few days later. The result is that I memorize patterns I used, reflect what I did (and sometimes find ways to improve the code), and I also remember the algorithms and their troubles.
Self-reflection like that helps me solve problems from scratch, which I know I solved somewhere else, but this time quick and smooth, and maybe even in a way which better fits with the new environment.
So, you might want to try to not only read about algorithms, but also write them and then re-read them and do some reflection about what you did.