(Part 2) Best algorithms and data structures books according to redditors
We found 472 Reddit comments discussing the best algorithms and data structures books. We ranked the 104 resulting products by number of redditors who mentioned them. Here are the products ranked 21-40. You can also go back to the previous section.
Here's free and frequently updated book: Foundations of Data Science by Blum, Hopcroft, Kannan
Also, check out:
Probability and Computing: Randomization and Probabilistic Techniques in Algorithms and Data Analysis by Mitzenmacher and Upfal.
> Mathematical Logic
It's not exactly Math Logic, just a bunch of techniques mathematicians use. Math Logic is an actual area of study. Similarly, actual Set Theory and Proof Theory are different from the small set of techniques that most mathematicians use.
Also, looks like you have chosen mostly old, but very popular books. While studying out of these books, keep looking for other books. Just because the book was once popular at a school, doesn't mean it is appropriate for your situation. Every year there are new (and quite frankly) pedagogically better books published. Look through them.
Here's how you find newer books. Go to Amazon. In the search field, choose "Books" and enter whatever term that interests you. Say, "mathematical proofs". Amazon will come up with a bunch of books. First, sort by relevance. That will give you an idea of what's currently popular. Check every single one of them. You'll find hidden jewels no one talks about. Then sort by publication date. That way you'll find newer books - some that haven't even been published yet. If you change the search term even slightly Amazon will come up with completely different batch of books. Also, search for books on Springer, Cambridge Press, MIT Press, MAA and the like. They usually house really cool new titles. Here are a couple of upcoming titles that might be of interest to you: An Illustrative Introduction to Modern Analysis by Katzourakis/Varvarouka, Understanding Topology by Shaun Ault. I bet these books will be far more pedagogically sound as compared to the dry-ass, boring compendium of facts like the books by Rudin.
If you want to learn how to do routine proofs, there are about one million titles out there. Also, note books titled Discrete Math are the best for learning how to do proofs. You get to learn techniques that are not covered in, say, How to Prove It by Velleman. My favorites are the books by Susanna Epp, Edward Scheinerman and Ralph Grimaldi. Also, note a lot of intro to proofs books cover much more than the bare minimum of How to Prove It by Velleman. For example, Math Proofs by Chartrand et al has sections about doing Analysis, Group Theory, Topology, Number Theory proofs. A lot of proof books do not cover proofs from Analysis, so lately a glut of new books that cover that area hit the market. For example, Intro to Proof Through Real Analysis by Madden/Aubrey, Analysis Lifesaver by Grinberg(Some of the reviewers are complaining that this book doesn't have enough material which is ridiculous because this book tackles some ugly topological stuff like compactness in the most general way head-on as opposed to most into Real Analysis books that simply shy away from it), Writing Proofs in Analysis by Kane, How to Think About Analysis by Alcock etc.
Here is a list of extremely gentle titles: Discovering Group Theory by Barnard/Neil, A Friendly Introduction to Group Theory by Nash, Abstract Algebra: A Student-Friendly Approach by the Dos Reis, Elementary Number Theory by Koshy, Undergraduate Topology: A Working Textbook by McClusckey/McMaster, Linear Algebra: Step by Step by Singh (This one is every bit as good as Axler, just a bit less pretentious, contains more examples and much more accessible), Analysis: With an Introduction to Proof by Lay, Vector Calculus, Linear Algebra, and Differential Forms by Hubbard & Hubbard, etc
This only scratches the surface of what's out there. For example, there are books dedicated to doing proofs in Computer Science(for example, Fundamental Proof Methods in Computer Science by Arkoudas/Musser, Practical Analysis of Algorithms by Vrajitorou/Knight, Probability and Computing by Mizenmacher/Upfal), Category Theory etc. The point is to keep looking. There's always something better just around the corner. You don't have to confine yourself to books someone(some people) declared the "it" book at some point in time.
Last, but not least, if you are poor, peruse Libgen.
Are we OK with warez here? This is not a free book as far as I'm aware: http://www.amazon.com/Core-Techniques-Algorithms-Game-Programming/dp/0131020099
Think Like A Programmer is the exact book you're looking for.
I don't think that is a very compelling argument, unless we believe mathematicians can do no notational wrong :-) The imprecise, ambiguous, sometimes obfuscatory notation that arises in multivariable calculus and the calculus of variations is a well known and frequently discussed issue. I think we underestimate the difficulty it causes to students, especially to students coming from other disciplines who aren't steeped in the mathematical vernacular.
It's been problematic enough that there are some high profile and semi-accepted attempts to refine the notation, such as the functional notation used in Spivak's Calculus on Manifolds, which is based in an earlier attempt from the 50s if I remember correctly. Another presentation of physics motivated in large part by fixing the notation is Sussman & Wisdom's Structure and Interpretation of Classical Mechanics which adopts Spivak's notation, and also uses computer programs to describe algorithms more precisely.
Proving algorithms is much harder than coding algorithms. I think you should get good at doing the analysis yourself. It is a very valuable skill.
There are entire books dedicated to string matching. Maybe something similar to your idea is in one of them.
Here are a couple:
https://www.amazon.com/Algorithms-Strings-Trees-Sequences-Computational/dp/0521585198/
https://www.amazon.com/Algorithms-Strings-Maxime-Crochemore/dp/1107670993/
Also, in the C code, why are you starting the clock before the “start of program” print statement (instead of after)? Printing text to the screen is a slow process and will add a lot of time to the clock.
Algorithms, Design Patterns, VCS, being familiar with typical CS interviews questions and something that will be really needed
Some Books:
For Algorithms:
http://www.amazon.co.uk/Algorithms-Sanjoy-Dasgupta-ebook/dp/B006Z0QR3I/
http://www.amazon.co.uk/Algorithm-Design-Edition-published-Springer/dp/B00E28CR4I/
http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844/
Design Patterns:
http://www.amazon.com/Design-Patterns-Explained-Perspective-Object-Oriented/dp/0321247140/
http://www.amazon.com/First-Design-Patterns-Elisabeth-Freeman/dp/0596007124/
http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612/
http://www.amazon.com/Design-Patterns-Dummies-Steve-Holzner/dp/0471798541/
Interviews:
http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X
http://www.amazon.com/Programming-Interviews-Exposed-Secrets-Landing/dp/1118261364/
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.
Stephen Palmer, Vision Science: From photons to phenomenology
http://www.amazon.com/Vision-Science-Phenomenology-Stephen-Palmer/dp/0262161834
This may not be exactly what you were asking for, but as someone who's interested in both philosophical aesthetics and design, I've found basic color theory and vision science a very useful thing to learn about. Here's a great vision science book that keenly engages our experience of the world.
Another completely different source of inspiration I've found for thinking about abstract principles in aesthetic experience has come from Scott McCloud's book Understanding Comics. It really does explore a bunch of complex ideas about how we can piece together a beautiful/ugly/complex/dynamic/static/etc. picture of the world from two dimensional images. It's not just about comics at all.
https://www.amazon.com/First-Course-Finite-Elements/dp/0470035803
This is the reading required to get you started. Matlab is suitable for your purposes, but asking on this sub isn't useful.
Given the simplicity of your problem, you could probably derive an analytical or semi-analytical solution... But this depends on how linear your problem is.
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.
The linked page has links to Amazon:
http://www.amazon.com/exec/obidos/tg/detail/-/0201853922/qid=1129255994/sr=1-6/ref=sr_1_6/103-2862622-6015065?v=glance&s=books
http://www.amazon.com/exec/obidos/tg/detail/-/0201853930/qid=1129255994/sr=1-4/ref=sr_1_4/103-2862622-6015065?v=glance&s=books
http://www.amazon.com/exec/obidos/tg/detail/-/0201853949/qid=1129255994/sr=1-3/ref=sr_1_3/103-2862622-6015065?v=glance&s=books
http://www.amazon.com/gp/product/0321335708/qid=1145223493/sr=1-3/ref=sr_1_3/103-3877294-3501445?s=books&v=glance&n=283155
Volume 4 is not complete yet.
I just recently discovered pythonbooks.org and it looks like a pretty good resource for books on Python, and it has categories for beginner, intermediate, and more specific topics.
Here's pythonbooks.org page on networking.
Here's a link to High Performance Python (chapter on concurrency w/multiprocessing)
Here's an open source book on the topic. And also a more computationally focused texted as well.
I've also heard good things about [this one](Combinatorics: Topics, Techniques, Algorithms https://www.amazon.com/dp/0521457610/ref=cm_sw_r_cp_api_iCKzxbCVJHRQ4), [this one ](Combinatorics: A Guided Tour (MAA Textbooks) https://www.amazon.com/dp/0883857626/ref=cm_sw_r_cp_api_ZCKzxb7XY8RJS), and [this one](A Walk through Combinatorics: An Introduction to Enumeration and Graph Theory (Third Edition) https://www.amazon.com/dp/9814460001/ref=cm_sw_r_cp_api_pDKzxbR3CYQGF)
I found this super helpful.
https://hackernoon.com/14-patterns-to-ace-any-coding-interview-question-c5bb3357f6ed
https://medium.com/leetcode-patterns
https://www.amazon.com/Think-Like-Programmer-Introduction-Creative-ebook/dp/B008RQMDU4
The problem is youre not thinking fast enough or not identifying patterns a lot of questions are solved exactly the same.
It's on my bookshelf, although currently reading more on emergent phenomena, such as Philip Ball's Critical Mass: How One Thing Leads to Another and some books on game theory. GEB, of course, was a big influence too :)
Regarding perception, I still tend to refer to my undergrad perception textbook Vision Science: Photons to Phenomenology. It's highly readable, even if you're not a specialist, although if you are interested in something more easy to digest, there is Richard Gregory's seminal book Eye and Brain, which is a great introduction to vision science and perception.
There are a lot but my favorites are
https://www.amazon.com/Purely-Functional-Data-Structures-Okasaki-dp-0521663504/dp/0521663504/ref=mt_paperback?_encoding=UTF8&me=&qid=
https://www.amazon.com/Structure-Interpretation-Classical-Mechanics-Press/dp/0262028964/ref=sr_1_2?crid=3RF2M50NKPULH&keywords=structure+and+interpretation+of+classical+mechanics&qid=1572889989&s=books&sprefix=structure+and+inte%2Cstripbooks%2C207&sr=1-2
https://www.amazon.com/Structure-Interpretation-Computer-Programs-Engineering/dp/0262510871/ref=sr_1_1?crid=1CSGG60L6328Q&keywords=structure+and+interpretation+of+computer+programs&qid=1572890005&s=books&sprefix=structure+and+inte%2Cstripbooks%2C413&sr=1-1
There are also more mathy type theory books and category theory books you should check out but I'd probably start with those 3
Would recommend The Nature of Code and Processing Handbook for parametric methods. Haven’t seen anything too comprehensive on AI models like GANs yet though.
You don't take Computer Science if you want to learn to program [languageName]. Computer Science is theory; and while you will use some programming language to explore the theory: it's not there to teach you a programming language.
If you want to learn to program, there are plenty of college level associates degrees for that.
Get ahold of Knuth's The Art of Computer Programming three volume set. He didn't even bother with a real language; but made up a hypothetical assembly pseudo-code language in order to explore concepts, algorithms, and costs.
tl;dr: Computer Science is to programming as architecture is to plumbing.
Have you looked at The Nature of Code? https://www.amazon.com/Nature-Code-Simulating-Natural-Processing/dp/0985930802/ref=sr_1_4?ie=UTF8&qid=1492058474&sr=8-4&keywords=processing
You might find something there to spark your interest.
I like that term too. Even in books 20+ years old (like this one) it was called VOP. However, nowadays the Haskell community emphasizes composition over immutability.
https://smile.amazon.com/Art-Computer-Programming-Fascicle-Millennium/dp/0201853922
And
https://smile.amazon.com/MMIX-Supplement-Computer-Programming-Volumes/dp/0133992314
The former is written by Knuth -- it focuses on the machine and AL itself. The latter is written by another author that updates the programs in the first three volumes to take advantage of MMIX.
I've only used cython a couple times but my experience was fantastic.
In the first case I had a simulator that was spending most of its time calculating distances between points and the nearest lines. I knew my algorithm was good, but profiling showed that the bare arithmetic was enough to make my code unacceptably slow.
Just extracting this function to a .pyx file and setting up the build correctly got me a 5x speedup. Then I added typedefs for the ints and floats and got an additional 10x speedup.
After crowing about this to a colleague she wanted to use cython to speed up a slow loop in some data analysis code. Again we got 5x just for putting the slow part in a .pyx file. There was a little more effort here figuring out how to correctly declare numpy arrays, but after that she also saw a roughly 10x additional speedup.
In both cases there was some necessary upfront work of profiling the code and refactoring to isolate the computationally intensive part. But if this is straightforward, cython can be a very quick win.
I recommend the book High Performance Python
http://www.amazon.com/High-Performance-Python-Performant-Programming/dp/1449361595/ref=sr_1_1?ie=UTF8&qid=1425266485&sr=8-1&keywords=high+performance+python
which taught me a lot about profiling, cython, and other tools for speeding up Python code.
I had a look through Core Techniques and Algorithms in Game Programming at the library, and it's now on my wish list. I haven't read it through yet, but it looks like a really good higher level overview of some things.
Does anyone know any more about this book?
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.
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
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.
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++ .
Some good reads:
http://www.amazon.com/A-First-Course-Finite-Elements/dp/0470035803/ref=sr_1_2?ie=UTF8&qid=1335739361&sr=8-2
http://www.amazon.com/Concepts-Applications-Element-Analysis-Edition/dp/0471356050/ref=sr_1_1?s=books&ie=UTF8&qid=1335739382&sr=1-1
Yeah, that's my point.. I was looking in Knuth's book for examples..
https://www.amazon.com/Algorithms-Sanjoy-Dasgupta-ebook/dp/B006Z0QR3I
​
This one is horrible, and made me want to kill myself when I took the course. Probably also offers good insight into the world you will be living in if you go this route
Generating Functions
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.
Entrepreneur Reading List
Computer Science Grad School Reading List
Video Game Development Reading List
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.
For compsci you need to study tons and tons and tons of discrete math. That means you don't need much of analysis business(too continuous). Instead you want to study combinatorics, graph theory, number theory, abstract algebra and the like.
Intro to math language(several of several million existing books on the topic). You want to study several books because what's overlooked by one author will be covered by another:
Discrete Mathematics with Applications by Susanna Epp
Mathematical Proofs: A Transition to Advanced Mathematics by Gary Chartrand, Albert D. Polimeni, Ping Zhang
Learning to Reason: An Introduction to Logic, Sets, and Relations by Nancy Rodgers
Numbers and Proofs by Allenby
Mathematics: A Discrete Introduction by Edward Scheinerman
How to Prove It: A Structured Approach by Daniel Velleman
Theorems, Corollaries, Lemmas, and Methods of Proof by Richard Rossi
Some special topics(elementary treatment):
Rings, Fields and Groups: An Introduction to Abstract Algebra by R. B. J. T. Allenby
A Friendly Introduction to Number Theory Joseph Silverman
Elements of Number Theory by John Stillwell
A Primer in Combinatorics by Kheyfits
Counting by Khee Meng Koh
Combinatorics: A Guided Tour by David Mazur
Just a nice bunch of related books great to have read:
generatingfunctionology by Herbert Wilf
The Concrete Tetrahedron: Symbolic Sums, Recurrence Equations, Generating Functions, Asymptotic Estimates by by Manuel Kauers, Peter Paule
A = B by Marko Petkovsek, Herbert S Wilf, Doron Zeilberger
If you wanna do graphics stuff, you wanna do some applied Linear Algebra:
Linear Algebra by Allenby
Linear Algebra Through Geometry by Thomas Banchoff, John Wermer
Linear Algebra by Richard Bronson, Gabriel B. Costa, John T. Saccoman
Best of Luck.
I would recommend this book. There is a 2nd edition which deals with data structures in C++ as well.
http://www.amazon.com/Data-Structures-Using-Aaron-Tenenbaum/dp/0131997467
https://www.amazon.com/Data-Structures-Using-Aaron-Tenenbaum/dp/0131997467
And 100% sure that the ansi c first edition book is not free.
Foundations of Data Science by Bloom/Hopcroft/Kannan. It's a free book and updated regularly(this edition here is dated June, 2017). Heavily overlaps with Probability and Computing: Randomization and Probabilistic Techniques in Algorithms and Data Analysis by Mitzenmacher/Upfal.
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
in addition, from the functional community:
Functional Programming: Practice and Theory, Bruce J. MacClennan
Purely Functional Data Structures, Chris Okasaki
Algorithms - A Functional Programming Approach, Fethi A. Rabhi nd Guy Lapalme
woven together, they will help fill the picture out.
Can you give more detail about your present background/what sorts of combinatorics you're interested in? If you're new to combinatorics it's hard to do better than Miklos Bona's book.
You might look in to the documentation for Ansys, there is a lot of good detail regarding how it works and different models for validation of different FEA types.
A good book iA first course in Finite Elements
Miller and Ranum (https://www.amazon.com/Problem-Solving-Algorithms-Structures-Python/dp/1590280539) was what I used and is fantastic.
http://www.amazon.com/Nature-Code-Simulating-Natural-Processing/dp/0985930802/ref=sr_1_2?ie=UTF8&qid=1416438876&sr=8-2&keywords=processing+daniel
Read.