Best data structure books according to redditors
We found 43 Reddit comments discussing the best data structure books. We ranked the 17 resulting products by number of redditors who mentioned them. Here are the top 20.
We found 43 Reddit comments discussing the best data structure books. We ranked the 17 resulting products by number of redditors who mentioned them. Here are the top 20.
I think that Problem Solving with Algorithms and Data Structures on interactivepython is actually perfect to start with - it gives you a good overview of both the technical concepts and implementations. It's not extremely rigorous, either.
Why not try going through it, and learn whatever you can? It's actually an interactive version of the book Problem Solving with Algorithms and Data Structures by Brad Miller and David Ranum (you can find a copy of the PDF here), which is one of the recommended textbooks of MIT's 6.006 Introduction to Algorithms along with CLRS.
On another note: if you'd like an language-agnostic approach that focuses more on algorithmic thinking, analysis, and some implementation in psuedocode, check out Algorithms: Design and Analysis offered by Stanford on Coursera.
As I recall, that's a pretty decent book/course. It's free, so just dive in and you can decide yourself if it's worth sticking with. Plus, the favicon kind of looks like Professor Farnsworth, so that's a bonus, I guess.
Other options:
Keeping to python, there's these two:
http://www.brpreiss.com/books/opus7/html/book.html
http://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275
And the MIT 6.006 Intro. Algo. course is taught in Python:
http://courses.csail.mit.edu/6.006/spring11/notes.shtml
Beyond python this is a pretty standard text (and is used for 6.006):
http://mitpress.mit.edu/books/introduction-algorithms
I would pick up both a data structures book and a C++ book; for instance, Data Structures and Algorithms in C++ and Programming: Principles and Practice Using C++.
Of course, you can use any data structures book you like; some are better than others, but they all teach the same stuff. But when you're learning the abstract stuff at the same time as basic programming, it can be nice to see examples in your language. Principles and Practice is one that I wholly recommend, though, as an excellent introduction to modern C++.
Also, be aware that there is way more bad C++ material out there than there is good C++ material. If in doubt, check out the semi-official book list or ask around here.
Point of recursion is not to be faster ... the point is that there are huge group of tasks which is obviously recursive and doing it iteratively means massive waste of time and loosing clarity of code.
Let's say I was writing json_diff (it is in PyPI) ... comparing two arbitrary json files. You have to go recursive there or you go mad. Various strategical tasks (examples could be The Problem of Eight Queens, ... get http://www.amazon.com/dp/0130224189 from your local library).
Off the top of my head:
I came here to put this same book. This book is crazy, crazy good. It would help to have some knowledge of algorithms and data structures before going in as the examples aren't vast and the information are fairly heavy, but it's a fantastic reference.
I would encourage you to change your thinking from "learning algorithms in Ruby" to "learning algorithms" and then just implementing examples in Ruby. There are a few classic Algorithms book that I'd highly recommend. In addition to The Algorithm Design Manual, Data Structures in C is written in C but fairly generic and gives you the right tools for thinking about performance and algorithms, and Introduction to Algorithms, 3ed is more academic but also stupid inexpensive right now. It's a great learning book as the examples are very detailed. It's aimed at interviewing but Cracking the Coding Interview has a nice short survey of algorithms and data structures too
Book prescribed by professor : Tannenbaum
Study material used by students : YouTube videos and GeeksForGeeks
ORLY?
Oldie, but
Algorithms + Data Structures = Programs
http://www.amazon.com/Algorithms-Structures-Prentice-Hall-Automatic-Computation/dp/0130224189
I noticed "Data Structures and Algorithms in Java" in the upper left. Don't know if it's any good. I'm an embedded software engineer using C & (a little) assembly. Only Java for me is poured into a cup.
Keep learning it! I thought I knew C++ pretty well. Then I started my data structures class. This book has greatly expanded my understanding of C++. I'm still not even close to done. But I'm working on other languages and learning how compilers work now as well. It never ends muwhahaha
http://www.amazon.com/Handbook-Small-Chapman-Statistics-Texts/dp/0412399202
So, (IMO) the raspberry pi doesn't specifically bring anything to learning C++ that I think you couldn't get on any other computer. And I'm assuming you have a computer because you're posting here (could be a phone but i don't know).
If you've got windows I tend towards Visual Studio and on a Mac I'd go with Xcode. When I'm in Linux I tend to just go straight to gcc and make (this won't make sense to you yet)
Books: These are the ones that were used in my C++ focused classes:
Big C++
ADTs, Data Structures and Problem Solving in C++
Hope this helps.
So I am more of a book guy these days. I found Algorithms + Data Structures = Programs by Niklaus Wirth to be pretty solid. For something a bit more contemporary Introduction to Algorithms by Cormen, Leiserson, Rivest and Stein is a very good textbook. If you're into math and learn best from repetition I'd suggest The Art of Programming Vol 1 by Knuth as well.
The issue I have with a lot of online content is the economics of the Internet are such that its not profitable to go in-depth, so its definitely worth paring online courses(whether they're from an accredited university or not) with a textbook or two. You might even want to crawl down the rabbit hole further and dig into the camps of mathematics where these concepts derive like Queue Theory or Set Theory. If your the type of person who gets the most out of things by tracing concepts to their roots digging into the maths helps a ton.
https://www.amazon.es/Algorithms-Data-Structures-Niklaus-Wirth/dp/0130220051
Algorithms + Data Structures = Programs
Some books are not interesting. There are certainly other books on this topic; this ancient classic helped me a lot when I was beginner.
> My reading of it was more along the lines of: your sensory input are not you, and you should not cling to them, the self is always changing, so you shouldn't expect yourself to be reborn as the exact same person in your next life. This is a far cry from "you, as a discrete "self", do not really exist"
I think you half-understood. If your self is always changing, in what capacity does your self exist at all? The self that you associate with "you", in the next instant, will be utterly different; so what is being preserved? What indelible "self-hood" is being passed along? If I build a sand castle, then knock it down and build a new one, and then knock it down and build a third one, and so on, in what sense can you say that the original castle remains?
> I believe that i have a point of focus different from my brain (information source/depository), because even if a computer could store all the information in my brain, there'd still need to be someone/something browsing and calling up certain bits of information for it to do what it does.
Not necessarily; automation is the heart and soul (as it were) of computing. Google has programs that scour billions of webpages, collating and indexing the data, and there is nobody on the other end dictating precisely what it must do or how it must accomplish it. What you've described is a data structure, which is only half the utility of computers; algorithms + data structures = programs.
> I find it hard to believe that we have abundant evidence that mind is inextricable from matter. I suppose once we admit (which we must) that energy is just free flowing matter it gets easier.
(Be careful here, "energy" reeks of woo-woo.) If I have a thought, or a feeling, there is a corresponding event in my neurology; science is even to the point that we can sometimes tell what you're thinking about with just an MRI. We have no examples of something being thought or felt, and being unable to connect it with neurological activity.
We might not entirely understand how a brain works, but I don't know how a car works; suggesting that there are non-physical components to the mind is like suggesting that a car can run without turning on its engine, and we've never observed that to be the case.
CS luminary Niklaus Wirth thinks so much so that he wrote a book titled "Algorithms + Data Structures = Programs"
Niklaus and I agree on this :)
Entrepreneur Reading List
Computer Science Grad School Reading List
Video Game Development Reading List
Miller and Ranum (https://www.amazon.com/Problem-Solving-Algorithms-Structures-Python/dp/1590280539) was what I used and is fantastic.
This is the book I'm using in school
https://www.amazon.com/Programming-Program-Design-Including-Structures/dp/1285852753
I don't know why you're getting downvoted.
Unless you want to learn programming and what it entails (algorithms and data structures), this is fine. A course, in all honesty, would be too slow. The majority of the material in the codeacademy course, it appears, is covered in the official Python tutorial, which goes even further in depth. Here's to save you googling:
Now, if you want to learn programming at an intern's level for example, Goodrich's book is a good start.
I think the consensus for a good introduction book to python is Automate the Boring Stuff with Python. I knew C++ when I started python and learned it though an Algorithms and Datastructures course in my masters degree. the book from that class is here : Data Structures and Algorithms in Python. Finally I found these tutorials at filling in gaps in my knowledge : Corey Schafer
Personally I find this to be the worst text book I've ever had Fundamentals of Data Structures in C++
Advanced Data Structures and Handbook of Data Structures and Applications are both well regarded.
I think a lot of people confuse programming with programming languages. I see a lot of people say things like "I learned <insert programming language here> but I still have no idea what I'm doing."
This is because programming is more than just the language you use. It is a set of skills, including mastery of a language, algorithms, data structures, design principals (and patterns), hardware knowledge, math, logic, problem solving... the list could go on.
Mastering a language is just one part of the equation. Depending on the kind of programs you want to create, you will have to master some, all, or more of the other skills I've mentioned.
I would start with data structures and algorithms. Since a lot of programming has to do with data, it's good to know the various ways it can stored, sorted and manipulated. You probably already know about simple data structures, like arrays, but there are many more, like lists, trees and maps. Algorithms like sorting, searching and pattern matching will help you solve some very common problems you'll encounter. Either enroll in a course on data structures and algorithms (they're generally taught together) or find yourself a good book.
Once you've mastered that, move on to design. Learning how to design a large program is an art and a science unto itself. There are many useful design patterns that, once you know how they work, you can apply directly to your own designs. While they're not the end-all-be-all of computer program design, they're proven effective and can be extremely useful.
Another thing you should definitely understand is how computers work. Now I"m sure you have a general idea of how a processor and memory works, but do you really understand the underlying architecture? Do you know how registers work? How instructions are stored? How the operating system interfaces with the various hardware? How the software interfaces with the operating system? While this knowledge isn't 100% necessary, it can be very helpful to understand how your programs are functioning on a low level. Most modern languages abstract most of that out, but keeping it in the back of your mind can only help.
Anyhow, I know how you feel, and don't worry too much about it. Programming is a life long learning endeavor. There will always be new things to learn, new ways to do things, and new technologies to understand, but if you stick with it, you'll eventually learn it.
Just think, every piece of software in the world was written by someone who, at one time or another, knew absolutely nothing about programming.
I used the 2nd edition of this book called Data Structures and the Java Collections Framework. At the time it was one of the most up-to-date books on Java 1.5 and generics. The book is very accessible for students, and probably one of the better technical books I've read in my entire academic career.
However, if I was to learn data structures from scratch again, I'll probably would go with Algorithms by Sedgewick. I've heard nothing but good things about the book, and don't let the name fool you. It actually focuses on the implementation of data structures or so I heard.
For Algorithms and Data Structures, I would recommend the book by Goodrich and Tamassia. There are three versions of the book that you can choose from, depending upon which programming language you are most comfortable with - Java, Python, or C++ .
I like this book: http://www.amazon.de/Data-Structures-Algorithms-Michael-Goodrich/dp/0470383275
It starts with quickly skimming over the basics because it assumes the reader to be familiar with C or Java. Later it deals with algorithms and data structures. Those were always my favorite programs to learn a new language.
Oh and I use Emacs but I think you are fine with Eclipse.
It's all the same material. Here's the book we used in uni:
https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/0470383275/ref=sr_1_1?keywords=Data+Structures+and+Algorithms+in+C%2B%2B&qid=1558918108&s=books&sr=1-1
These authors wrote the same book in like 6 languages, just find the language you want.
sounds like this one
I see it available on Amazon for cheap.
I would recommend https://www.amazon.com/Schaums-Outline-Data-Structures-Outlines/dp/0071611614 in addition to the Sedgewick book.
First of all, thanks for you answer.
For example I have a python object containing 5 attributes.
attr1, attr2, attr3, attr4, attr4, attr5
Some of them are Integeter, some of them dates and some of them Strings. For example I'd like a function that returns me all objects based on criteria
attr1 > 10 && attr3 = 'randomString'
Would a list of Dicts be faster or a list of objects. Also if you happen to know any good book that explains this stuff it would be awesome.
Something like this one? https://www.amazon.com/Algorithms-Structures-Prentice-Hall-Automatic-Computation/dp/0130224189
My dad was an lecturer at Data General and he borrowed a book on BASIC for me - no idea what it was called.
Aside from that one of the first serious books I read was Niklaus Wirth's Algorithms + Data Structures = Programs - it was a first year course book at University so there would have been quite a few others (most of which I've forgotten) but another memorable one was Clocksin and Mellish's Programming in Prolog
"Algortihms + Data Structures = Programs"
There are books for different programming languages.
Also, check out MITs web site. All of their courses are on line for free.
Algorithms + Data Structures = Programs
https://www.amazon.com/Algorithms-Structures-Prentice-Hall-Automatic-Computation/dp/0130224189
>Point me to one page explanations of them and I'll be amazed by them too.
http://en.wikipedia.org/wiki/List_of_algorithms
Take your pick, each of the links on that page is to a brief summary explanation, and many of them will probably be "amazing" to relatively new/less widely-experienced programmers.
EDIT: Also, there are a host of standard reference books with a plethora of such things in them: Sedgewick's is a classic, then there is Wirth's Algorithms and Data Structures which used to be considered a "must read" for anyone in the profession, and then there are more recent things, like O'Reilly's nice little handbook/guidebook