| There are a few parts of it. Computer science is a dynamic field so stay away from the 40-year old textbooks of Knuth. Most of the algorithms you will find in older books (binary search, sorting over total orderings, random number generators) are already built into most programming languages today. If you are programming in something like Java or Ruby your first instinct should be to use the lists, hashtables and similar structures that come with your language. As for actual algorithms I think the theory of parsers and finite state machines is pretty useful because you can certainly tackle tasks that would otherwise be difficult. One aspect of the science of data structures and algorithms is understanding how algorithms scale, and the classic searching and sorting algorithms are a playground for that. Another thing is to look at modern families of algorithms that do things that are counter-intuitive, here is one book i really like http://ebooks.cambridge.org/ebook.jsf?bid=CBO9780511574931 a lot of the stuff in there sounds impossible at first but it is very possible. I also have a soft spot for algorithms that involve partial orderings since I've found my conventional intuition is not always right here, this includes transitive closures, dependency resolution, and the binary space partitioning used in computer graphics. |