I never hear anybody mentioning him but Jeff Erickson's 'Algorithms' textbook [1] has some of the most lucid explanations I've come across. CLRS is often times impenetrable and for the times I didn't like its explanation of something I turned to Jeff Erickson's book and it hasn't failed me yet. I'd urge anybody trying to solidify algorithms and data structures to take a look at it.
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!
The word "tâtonner" should be the same as Italian "procedere (proceed) a tastoni", since usually the circumflex accent in French correspond to an "s" in Italian.
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.
I just skimmed over skiplist in point 10 of your book. The concept and definition of skiplist is easy to grok and it is well explained but in point 10 there is not any information as to when should I use a skiplist, what kind of problem a skiplist is a good tool to use. I have bookmarked your page, it seems to be a useful resource if it is complemented with a comparison and use case for all these data structures.
A skiplist is a good candidate for problems where you are considering some kind of self-balancing tree. I find a skiplist to be the simpler structure in those cases.
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.
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.
Hi, I looked at some of your lecture videos which also look great. You have a wonderful teaching style. Is there any possibility of these lecture videos getting on youtube? Watching is a little choppy. Cheers.
For beginners, I've always thought Aho, Hopcroft and Ullman's Data Structures & Algorithms is a bit under-rated [1]. It's short, mathematically inclined and contains very clear Pascal pseudo-code.
(edit) Their book, The Design and Analysis of Computer Algorithms, impressed me greatly for the clarity of the thinking and conciseness of explanation, not just compared to other algorithm books, but against anything I've read in any subject.
Jeff is also a great professor. If you ever get the chance to take a course with him, do it. You won't regret it. I had him for both 173 and 373 back in the day, and credit his teaching style for the immense amount of material I picked up.
I'm currently taking 374 (the new 373). Unfortunately Jeff isn't leading my lectures, but the couple times he's subbed in were excellent. Really looking forward to taking 473 with Jeff next semester!
I had no idea about this. This looks fantastic! Theres a whole chapter on "advanced dynamic programming."!
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!
[1] http://jeffe.cs.illinois.edu/teaching/algorithms/