Advanced Data Structures
courses.csail.mit.edu
courses.csail.mit.edu
As a kindle user I'd love to see a kindle edition.
Says on the title page: Creative Commons!
"Attribution-NonCommercial-ShareAlike 4.0 International"
While causally browsing I noted the following in the 8-queens backtracking example:
"The following recursive algorithm, essentially due to Gauss (who called it “methodical groping”), ..."
Hilarious, especially given the current situation. I'd like to know what his original German term was.
Gauss indeed wrote "methodisches tatonniren"[1], the latter of which is not a common German word, nor does it suggest grouping. I believe it to be an expression used at the time which was borrowed from French "tâtonner", which means "fumble", to describe a step-by-step process, "approaching" a solution. The closest I get in modern German is "herantasten", which in turn does not have an elegant English translation; you will have to take its elements "heran" (onto) and "tasten" (touch/feel/grope) individually to judge how close it is to fumble.
So, methodical groping is not as far off as you might have thought!
[1] https://books.google.com/books?id=3jEDAAAAQAAJ&pg=RA1-PA106&... This may be a typo—the regular verb form would be "tatonnieren"—then again a lot of German spelling has changed since the time of those letters.
The meaning is "feel your way"---proceed carefully and at every step feel what is around you, as if you were walking on complete darkness.
this would be a fitting translation of the german word "herantasten", which has nothing to do with groping btw
Given a directed graph with on each arc a maximum flow and a cost per unit of flow, how to find the least cost flows for a given total flow? That is linear programming. The simplex algorithm takes on a special form, and a simplex basic solution corresponds to a spanning tree. A simplex pivot is adding an arc to the tree to yield a circuit, and getting the cost of sending a unit of flow around the circuit evaluates that new arc. Etc.
W. Cunningham defined a strongly feasible basic solution which avoids cycling.
IIRC, D. Bertsekas has a good (polynomial) algorithm for that problem.
I didn't see such mentioned in your table of contents.
On my 14" screen, your PDF files would be much easier to read if the maximum number of characters per line was about 50.
I personally used it in an observable collection library, where I needed efficient indexed insert and the ability to compute the index of a node.
"Algorithm design manual" is another my favorite.
I never find CLRS appealing to read other than being used as a textbook in a formal class.
Also, this: http://jeffe.cs.illinois.edu/teaching/pikachu.html
I know people like to debate the merits of "thee algorithm book" be it CLRS or Desgupta etc. but I find that having many such books is extremely beneficial - occasionally one author will articulate a particular insight that will resonate for me in such a way that makes me believe I maybe hadn't completely internalized that thing before, despite having read similar content from other sources on many occasions and believing I had.
Anyway this looks like a great such addition to my personal canon. Thanks for sharing!
https://www.google.com/search?q=Algorithms+Jeff+Erickson+sit...
I found it trivially at
http://courses.csail.mit.edu/6.851/spring14/scribe/2012scrib...
--
Playlist (2012 lectures from MIT OpenCourseWare):
https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP...
I've been trying to find them on the site to no avail.
But right now as a programmer, I am using data-structures more on an as-needed basis. Sometimes it is difficult to find the right data-structures for the job. So then it would be nice to have a resource that provides the functionality of data-structures as a black box. Learning these would make more sense than learning also all of the gory technical details upfront.
But when you need more, it's good to know your options.
In fact I'd say nobody can afford to be intimately familiar with all the various advanced data structures. But most people will, at most, just need to know the things they might need, then go learn about them when they need it, and many won't even need that much.
(Note that is a correct usage of the O notation; because of the fact that those two things are equal we generally just use O(n) because for clarity you might as well use the simplest member of the equivalence class defined by the O notation, but it is still valid to write O(n/10). It's just an error to treat it as anything other than equal to O(n).)
Even if you already have and are happy with CLRS, Skiena's book is a great addition to your library.
At the other end of the spectrum - accessible and brief, I find Dasgupta et al.'s Algorithms a refreshingly engaging read.
Does that count?
P.S. I have never recommended it to anyone though, I don't recommend books I haven't read all the way through. I will get through TAOCP one day, (it's now on my retirement bucket list, along with learning Sanskrit) but I first need to read through a bunch of Math books forst, so I can get past the 50 page hump.
Might this one suffice: Concrete Mathematics: A Foundation for Computer Science (Knuth et.al.)
What I can say is that "Concrete Mathematics" is a terrific book. It is the best general "math for algorithms" book I have seen. Its exercises are wonderfully picked, with problems at all levels of difficulty and classified neatly into categories. It also discusses topics that for strange reasons are not as widely known as one would expect, even though they are extremely elegant and quite useful. A concrete example of this is the Euler-Maclaurin formula relating sums and integrals.
This is mostly all IMO, except where specified otherwise:
- it's an interesting language, because it is the ancestor of many Indian languages (except the languages of the southern Indian states - Tamil, Telugu, Malayalam and Kannada - and their dialects - and except the languages of the North-Eastern states beyond Assam, maybe - not sure on this one). In fact, even those languages (southern Indian at least) have some Sanskrit-derived words; I think the term is loanwords.
- it's grammar rules are very regular (compared to many other languages, I've heard), which makes it less of a chore and easier to remember and learn;
- (probably many) parts of the language are sort of mathematical / logical in the sense that some of the rules build upon other rules, so you can use your knowledge of the latter to understand the former; e.g. a part of the language called sandhi, which gives the rules for how to combine smaller words/sounds into larger ones. Once you learn those rules (and there are only a handful), a) you can use them both to create new words according to those sandhi rules, by combining existing words (and those new words would be legal Sanskrit, BTW - poets and prose writers did it all the time), and b) can use them to figure out what compound words mean (that you have newly come across), i.e. the reverse process of a). So in that and maybe some other aspects its a bit like a programming language [1], where you build up higher abstractions from lower-level ones. [Edit:] It's my guess that people who like languages like Lisp, Haskell, Clojure, etc. - that are built upon mathematical principles and so on, might find Sanskrit interesting to learn.
- [1] I've also read a few times that due to the mentioned regular qualities of the grammar (and also, I think, due to the unambiguous nature of the sounds in it - each letter or small letter grouping can be (legally) pronounced in only one way), CS and Sanskrit-knowing people have done research on using Sanskrit in computer research in various ways (programming languages (research), AI? No idea about the success or not of those efforts, though.
"The name Pāṇini Backus form has also been suggested in view of the fact that the expansion Backus normal form may not be accurate, and that Pāṇini had independently developed a similar notation earlier."
So that may be one of the (few or common?) cases where something was named (or considered being named) after a person thousands of years after the person existed :)
I'm an enthusiastic student of Buddhism. I long time ago, during university (late 80s) I attended a guest seminar called "What the Buddha Said" It was fascinating for a number of reasons, but the one that stuck with me over the years was about the translation.
As we know, language changes over time (my favorite example is from rap: "Not bad meaning bad but bad meaning good) So what had happened in the translation of a key Buddhist text was the understanding of one word: year. It was translated literally to mean a year, but actually, at that moment in time, the word actually meant a season. So 20 years passed, really meant 20 seasons, or 5 years had passed. And this led to a knock on in the meaning of words used.
So after that, I decided that one day, I will learn to read the texts in their original language.
On the other hand, it isn't a very practical solution to most people who are thinking "I'm not sure what algorithm to use here".
(spent 2 min trying to find them)
https://www.youtube.com/playlist?list=PLUl4u3cNGP61hsJNdULdu...
I've learned so much and am really impressed with their depth of knowledge and how they are able to convey complex ideas in a very easy to understand way, I can't wait to start the next courses.
Anyone would recommend resources for learning fundamental of data structures?
Book, video, or courses are welcome. I don't care the programming languages that are used for implementations. I am OK with C.
Really enjoyed that book! It intersperses real world use cases which helps when your motivation starts to wane and has a warmer tone than most algorithm books. That being said, it is still pretty rigorous and will take a lot of work to get through it all.
Whichever resource you choose, make sure it has exercises and do them! Even if you can't 100% figure some of them out just trying to will help your thinking immensely.
I like your advice.
Another would be Sedgewick's Algorithms. He has a pair of courses on Coursera [0] that follow his 4th edition which uses Java.
You're in for such a treat! Learning data structures and algorithms is so fun and really changes the way you think about programming.
[0] https://www.coursera.org/learn/introduction-to-algorithms
Alg Design Manual is great and gives shorter shrift to complexity notation and the math behind it, while still giving you a robust introduction to it. Also, it's not as long as it appears as much of the book is devoted to going through specific algorithms so you can be familiar and add them to your mental "tool kit."
When I was taking analysis and design of algorithm class in my school, my lecturer used CLRS book as the main book. I think that book is so hard to learn. Some parts in the book is easy to understand, some other part is not.
[1] http://adit.io/posts/2016-05-25-Grokking-Algorithms-Is-Out.html
[2] https://www.amazon.com/dp/1617292230/ref=cm_sw_su_dpFor data structures in specific, You can go through following courses
1. CS 61B, Prof Jonathan Shewchuk, UC Berkeley -> [1]
2. COP 3530 Data Structures and Algorithms, Prof Sahni, UFL -> [2], videos are available at [3]
3. COP 5536 Advanced Data Structures, Prof Sahni - UFL [4]
All above courses focus on ideas than on mathematical rigour.
[1] https://www.youtube.com/playlist?list=PL4BBB74C7D2A1049C
[2] http://www.cise.ufl.edu/~sahni/cop3530/
[3] http://www.cise.ufl.edu/academics/courses/preview/cop3530sah...
Quite the pre-reqs...
I don't care about financial success, I am curious about scientific success.
God I wish there was mind recorder. I would listen to his (and people like he) mind all day, how they think, what they think , how they manage their time, everything.
Scientists should study these guys, imagine a world filled with people like Erik (in all careers) how beautiful that world would be.
I cannot understand how in earth you infer from that to cloning them.
Anyway, haven't we/they studied them ? That's what's missing ?
I refer to cloning, cause you can't take `normies` and tell them what to do and they'll become a science-guy. Cause they don't want to, don't enjoy the process, don't have the mental capacity (pick any of them or all of them).
So you need good genes (be able to learn, wanting/enjoying to learn), good enough life (don't get born in war-torn country), a good program on how to do them (what you say), a little guidance/mentoring.
>>imagine a world filled with people like Erik (in all careers) how beautiful that world would be
You have to also include `normies`, right ?
Do you think this will happen without cloning or messing with genetic code ?
I literally worship people like Douglas Schmidt, Erik Demanine, Tim Roughgarden, Robert Sedgwick ...
They literally changed my life.
Can you imagine third world universities? I am sure not. After 4 year , you end up knowing nothing , literally nothing,not even writing hello world.
Thanks to these guys I am reading a book every month. For past two months I was reading Silberchats database books.
I think a lot of programmers have good understanding of many data structures. But I think hashes and dictionaries are still taken for granted. What they really need to think of hashes as many magical black boxes and the hashing function directs which key to go to which magical bucket. :)