I think a good book that covers that basic mathematics needed to understand and use algorithms is Concrete Mathematics. Some of the problem sets are rather challenging, but you don’t need any special math knowledge to get started. It covers both continuous math topics, as well as dis*crete*. It’s co-written by the algorithms god himself, Donald Knuth.
If you struggle with some algebra concepts, I would also recommend Khan Academy. I’ve used it pretty extensively to brush up on topics I haven’t seen in a while.
https://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025
Well, the example you posted would be covered indeed by a course on discrete math. Are you familiar with induction and inductive proofs? I can recommend going over Concrete Mathematics. That book should put you well over what's needed for algos and data structures
Start with Concrete Mathematics. This is the combinatorics and number theory needed to get into The Art of Computer Programming and is also written by Don Knuth (with additional help from Ron Graham and Oren Patashnik).
He also wrote a pretty decent Math book (If I say so myself and others apparently agree with me considering that it has run for two editions without really being a popular university textbook).
So clearly, even if you find his books on Computer Programming to be "basically nothing to do with computer programming", there is other published value that he provides.
> collections of presumably outdated algorithms.
I find this a claim that says more about you than Knuth. What makes an algorithm "outdated"? After all, a lot of introductory programming books start off with the Euclidean Algorithm to find the GCD of two integers, which Wikipedia tells me has at least appeared in 300 BC.
As someone else said, the purpose of studying algorithms (and a lot of books fall into the trap of making this about a museum of algorithms) is to understand how to systematically break down a problem into standard abstract principles. I think the collection of work that Knuth has provided certainly indicates that he has thought a great deal about the subject.
> The guy has been paid as a professor to write seemingly esoteric books as personal projects.
So what? Stanford is a private university that is entitled to spend their money as they please. Clearly, all parties (him, the students who apparently enjoy his books, the university) are happy or they'd have stopped engaging in this ritual.
Also, while you are not wrong that it is esoteric, you are in Math. A lot of Math is esoteric depending on what the reference class is. A book on algorithms is esoteric to someone who is struggling to figure out whether 1/3 or 1/4 is bigger. So this isn't quite the catchy insult that you seem to imply that it is.
I recommend reading Concrete Mathematics. Most of the material in that book is applicable to some project euler problems. Also The Art and Craft of Problem solving covers a lot of techniques that are essential for solving math problems. You can find older version of these books online.
Why not also consider learning maths on the side too? Having a crap maths teacher can screw things up for your foundations but there are plenty of good maths books out there...
https://www.amazon.com/dp/0201558025/ref=cm_sw_r_cp_api_fab_rCjFFbDGX68CJ
Generally after CLRS you should be ready to read TAOCP. But if you still feel insufficient, Professor Knudth has another book that you can look into to enhance the math background - Concrete Mathematics: A Foundation for Computer Science.
This is the book we used in my probability/stats class this past term and we'll be using it again in the winter. I can definitely second the recommendation. Really, my only minor gripe with the book is that its z-table and t-table give the area under the standard normal curve to the right of the point, whereas I'm used to seeing tables that give the left area. However, that's just a personal nitpicky thing and I can't really dock any points from the book's overall quality for it.
As an additional recommendation, since you're interested in machine learning as well as brushing up on your combinatorics skills, you might also try Concrete Mathematics by Ronald Graham, Donald Knuth, and Oren Patashnik. As its name and authors would suggest, it's a mathematics textbook but it's really aimed at topics that have applications for computer programming. As they describe it, the topics are "a blend of CONtinuous and disCRETE mathematics"
You can always learn it on your own. Try working through a book like Concrete Mathematics by Knuth et al. It's not an easy ride, but it can be navigated by anyone with a bit of willpower (of course having been provided some exposure to related material is beneficial).
https://www.amazon.ca/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025
I have Rosen's book. Haven't studied out of it, but use it as a reference sometimes. I get the feeling that both Epp and Rosen are on the same level(difficulty or otherwise). Right now I am going over forgotten elementary number theory to prepare for Concrete Math by Graham/Knuth/Patashnik which looks much more involved as compared to both Epp and Rosen (just by comparing the exercises).
Well, since you are looking to teach yourself high level mathematics in a short period of time, Concrete Mathematics is a book on mostly discrete mathematics that has a ton of advanced math techniques your college courses might not cover (but are still useful). Problem solving classes (for, say, the Putnam competition) sometimes use this book. It covers material at a rather high level, but it's also written in an easy to read prose, rather than the dry matter of fact ones you find in other math texts. Even so, nothing in the proofs is skipped, and the notation is very precise (emulate it!). You might want to look online for some short pdf guides on how to write proofs (and maybe inductive proofs) before trying this text out.
As with reading any math, you should attempt as many questions as you feel comfortable doing.
Lots of good advice here. But I'd give this a look as well. It's been on my short list for a while: http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025/ref=sr_1_2?ie=UTF8&qid=1424661433&sr=8-2&keywords=math+for+programmers
Study this book: http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025/
There are approximately sixteen bijillion different kinds of infinite sums, so it's pretty impossible to tell you tips for all of them. You should at bare minimum be familiar with geometric series.
Out of curiosity, what book are you using? If it isn't Concrete Mathematics, you might get some help from reading the first section in this book about recurrences. It is a great book and helped me a lot when I took combinatorics, i.e. learned how to count.
I just ran across this in chapter 2 of Concrete Mathematics and it blew me away. Finite calculus (already done by cwcc) is one way to derive it, but here is another way that uses a couple of tricks.
First notice that
2[1(1 + 2 + ... + n) + 2(2 + 3 + ... n) + ... + n(n)]
= 2[1(1) + 2(1 + 2) + n(1 + 2 + ... + n)]
= 2[1(1 + 1)1/2 + 2(1 + 2)2/2 + ... + n(1 + n)n/2] , using the sum of an arithmetic progression
= (1^3 + 2^3 + ... + n^3) + (1^2 + 2^2 + ... + n^2).
The first line can be rewritten as
[(1 + 2 + ... + n) + 2(1 + 2 + ... + n) + ... + n(1 + 2 + ... + n)] + (1^2 + 2^2 + ... + n^2), the sum of the upper triangular elements of a symmetric matrix
= (1 + 2 + ... + n)^2 + (1^2 + 2^2 + ... + n^2).
Comparing this with the fourth line yields the result.
The trouble is that tricks are OK, but I was hoping for a deeper reason.
Long answer is here
Short answer is "stop whining and learn while you still can"
Regards,
Someone who didn't
A couple years ago a coworker turned me onto a book he coauthored, <u>Concrete Mathematics</u>. Absolute must read/reference if you write a lot of math-y code.
There's a truly fantastic presentation of the Josephus problem, along with a lot of other great approachable mathematics presented in engaging style, in Knuth's <u>Concrete Mathematics</u>
I'd recommend that and Cuoco's <u>Mathematical Connections</u>, along with any good Martin Gardner collection as great alternatives to textbooks for folks who just want to play around with problems
Curious, did you start with Concrete Mathematics first, or did you jump right into it?
And this is a great book. Maybe not the first book you should read on the subject, but one you should read at some point.
http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025
Maybe this book will answer your question .
https://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025
I vaguely recall Concrete Mathematics covering Josephus and its generalizations in one of the early chapters. You might want to take a look at that.
On the math side, focus on Discrete Mathematics books and courses. That will be the most immediately useful and foundational. There are three books I recommend. The first one here is a staple at schools: https://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025
Then go to this one: https://www.amazon.com/Discrete-Mathematics-Applications-Susanna-Epp/dp/1337694193/ref=zg_bs_13913_9/135-0737937-5619168?pd_rd_i=1337694193&psc=1
For more advanced work and something that has a lot of future applications, this one:https://www.amazon.com/Introduction-Graph-Theory-Dover-Mathematics/dp/0486678709/ref=zg_bs_13913_5/135-0737937-5619168?pd_rd_i=0486678709&psc=1
I recommend these books:
Maybe not exactly what you're looking for but you might want to look at Concrete Mathematics by Donald Knuth, et al. Much like other Knuth books, it's less about programming than it is about the theory underlying programming (in this case discrete mathematics).
Technically it's a textbook but many years ago, we used it to solve some real-world problems as it was one of the very few practical references (at least at the time) for computing Stirling numbers.
You might be interested in mathematics more than you are in CS. I'm self studying abstract algebra and reading through concrete mathematics
Knuth, Patashnik, and Graham's Concrete Mathematics.
Sedgewick and Flajolet's An Introduction to the Analysis of Algorithms.
And for computer science-related math:
[Easier] https://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025/
[Harder] Volume 1 of https://www.amazon.com/Computer-Programming-Volumes-1-4A-Boxed/dp/0321751043/
I've been told that this math book covers most of the basic material in CS: https://www.amazon.ca/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025
Haven't taken a look at it yet, though.
Read this book: Concrete Mathematics by Graham, Knuth, Patashnik. It should help!
I might recommend:
Probably one of the most important and powerful techniques in combinatorics is the probabilistic method, first developed by Paul Erdös (a name you'll hear over and over if you continue to study combinatorics and discrete mathematics). It's really the first technique that takes combinatorics beyond clever counting tricks, but unfortunately it's not often covered except in more advanced classes.
I recommend The Probabilistic Method if you want to learn more about it.
If you are struggling with the mathematics, the perfect companion book is Concrete Mathematics
Since you're so proactive in your education, I thought you should know about these sites:
avxsearch.se(usually carries books that are not on either site above)
Here's a nice free book you might like: Book of Proof
Also, you should know about the book below:
I like the book Concrete Mathematics http://www.amazon.com/dp/0201558025/
I haven't had much of any formal schooling, but there is a lot of good material available for self-study that is freaking great. If your program was weak, check out SICP and Concrete Mathematics
Concrete Mathematics, by Graham, Knuth, and Patashnik (Amazon )