I would like to learn more about Data Structures & Algorithms. Can anyone suggest a good starting point?
views:
1422answers:
7Find a good textbook, like Cormen, Lieserson & Rivest's Introduction to Algorithms.. This should give you an overview of the subject matter and is also quite easy to read. On top of this, there are many, many web resources on algorithms. Searches by specific names or subjects should turn up appropriate links.
The simplest answer is by taking an introductory course on Data Structures & Algorithms. Something like SICP from MIT would be a good introduction. There are even lectures available online in video form at http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/. The fact of the matter is that Structure and Interpretation of Computer Programs will give you a strong enough intuitive understanding of DS&A that you should be well on your way after this one book.
That being said, in my experience the best way to learn about Data Structures and Algorithms is to realize that Algorithms + Data Structures = Programs. You should attempt to find a problem that is interesting to you that seems like something fun to solve, and then you should attempt to write a piece of software to solve that problem. Once you have a working solution, that's when it gets fun... find places where the code doesn't "smell right." Places where you find repetition in your algorithm, places where you are putting data in to too many variables, places where your scaffolding code takes up more room than your functional code, and then ask yourself: "so, what is this code trying to do...", boil that down to a googleable query, and then ask google questions like: "how do I manage parallel arrays", "how do I manage parent-child relationships", "how do I find the shortest path between N cities in which each city is only visited one time."
If at all possible, find yourself someone who is more experienced at programming that you are, ask them to please review your code, and to tell you places wherein they think there is room for improvement, and then improve it. Do that for about 10 years, and you'll probably begin to get a good solid understanding of data structures and algorithms :)
Cheers!
take data structures class in online or in a college. as far as I know you can take any course in any college as non degree seeking student if you met prerequisites of that course.
here is Berkeley web cast about Data structures. http://webcast.berkeley.edu/course_details_new.php?seriesid=2008-D-26332&semesterid=2008-D
I may get some flames for this, but learning C and having to build complex data structure using pointers is, I think, an excellent way to completely understand what they are, how to use them, when to use them and how to build them.
The rationale is that because C is so low-level you have to get your hands dirty and have to think about memory, how to organise it, how to efficiently traverse it, how to manage it.
Once you've been through that, you get a good foundation to understand the reality behind the abstract concepts of Data Structures.
If you want to understand how a car works, you can just read the books but if you get under the bonnet and actually touch and see how it works then you'll get first-hand knowledge and that's invaluable I think.
berkeley also has undergrad courses online
http://webcast.berkeley.edu/course_details_new.php?seriesid=2008-D-26332&semesterid=2008-D
They have many semesters I think online.
A good read is the Algorithm Design Manual. I find it easier to absorb the information because of the author's writing style.