I spent most of my life wondering if the talent was something you developed, or something you were born with. Then it occurred to me that the answer was irrelevant, at least if you want to achieve something yourself. Even if you have talent, it will only help you if you act as if the talent came only from practice, because you will work much harder.
As for algorithms, as well as any other really complex skill, practice is required to achieve good practice. Regardless of whether you need to have a certain talent, I do not know. However, I do know that people have significantly improved competitions like TopCoder by practicing. I myself have learned a lot from this.
If you create a systematic training program, you will be ahead of it, even if it is not perfect. I wrote several hundred programs on TopCoder, and this seriously influenced my thinking. I learned a lot of things that you could ever learn by making them wrong, and then fixing my mistake. My friend wrote several thousand programs on TopCoder, and he is much better than me, although his statistics were worse when he started than mine. This is not a coincidence.
EDIT:
I just stumbled upon this answer in a math.stackexchange file. I think this is one of the best explanations for how to learn the algorithms that I read, although he writes about chess and mathematics.
Jørgen Fogh Jun 11 '10 at 10:03
source share