I think this may just be one of the most frequently asked questions by a novice (like me) on this site. Please pardon me for that. My question is I wish to get better at solving the harder problems of competitive programming which almost always are very tough dynamic programming formulations, dynamic data-structure manipulations and hard combinatorial object manipulations. How should I go about training myself to not only gain confidence but also gain an expertise in these areas. Yes, I know the obvious answer is practise! But, I'd want to know say books or materials that I should look up to before hitting a programming site like say spoj, hackerrank, codechef, codeforces and the like.
closed as off-topic by BЈовић, Philipp, user61852, ratchet freak, Kilian Foth Sep 9 '14 at 8:37This question appears to be off-topic. The users who voted to close gave this specific reason:
|
|||||||||||||||||
|
Read some good algorithmic books (e.g. Knuth the art of computer programming). Learn several container algorithms techniques (hash tables, trees & balanced trees, linked lists, vectors, ...). Study some free software (hint: installing and using Linux is useful). Look on SourceForge and GitHub to find some of them. Learn several programming languages (including academic ones, like Scheme with SICP, and/or Ocaml and/or Prolog and/or Haskell and/or Agda, etc...). Study the underlying (compiler and interpreter) techniques. Read Queinnec's Lisp In Small Pieces and Scott's Programming Language Pragmatics Contribute to some free software. In principle, it is dead simple (but requires a lot of time and effort). Choose some free software that you like, study its source code, ask questions about it on the developers' mailing list, maybe contribute to its wiki, propose a small patch, and get it accepted. Then repeat. Once you've done the effort to dive into the code, it is mostly a social issue (which might not be easy). If you don't know how to chose a free software to contribute to, I have a (biased) suggestion : write some MELT extension of GCC to help existing free software, for example, code some coding rules in MELT for Gtk. Contact me for more, since I am the main implementor of MELT... Wikipedia has a lot of interesting material: call stack, continuation, syscall, garbage collection, B-tree, etc etc etc etc... If possible, also study Computer Science at some university. |
|||||||||
|