
Advanced Data Structures - ingve
http://courses.csail.mit.edu/6.851/
======
stuxnet79
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.

[1]
[http://jeffe.cs.illinois.edu/teaching/algorithms/](http://jeffe.cs.illinois.edu/teaching/algorithms/)

~~~
jefferickson
Thanks for the shout-out! If you can't remember the long URL,
[http://algorithms.wtf](http://algorithms.wtf) also works. Please send me bug
reports!

~~~
Jun8
Looks great, thanks a lot!

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.

~~~
ludwigschubert
Oh this is a fun rabbit hole to go down:

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&...](https://books.google.com/books?id=3jEDAAAAQAAJ&pg=RA1-PA106&lpg=RA1-PA106&dq=8+königinnen+gauss&source=bl&ots=BuaJSJydKs&sig=1Z78TngV_y6IyQ8QNRwSVmvohvY&hl=en&sa=X&ved=0ahUKEwim0v3zhZHQAhXolFQKHStQCFYQ6AEIIjAB#v=onepage&q&f=true)
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.

~~~
bonzini
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.

~~~
scns
>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

~~~
bonzini
Yup, "groping around" is not at all the same as "groping"!!!

------
0xmohit
All scribe notes in one PDF:

[http://courses.csail.mit.edu/6.851/spring14/scribe/2012scrib...](http://courses.csail.mit.edu/6.851/spring14/scribe/2012scribes.pdf)

\--

Playlist (2012 lectures from MIT OpenCourseWare):

[https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP...](https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf)

~~~
packetslave
ooh, I had forgotten that Erik Demaine taught that course. He's great
(MacArthur Fellowship, MIT professor at 20, etc.)

------
amelius
This is very nice.

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.

~~~
jerf
As you get into advanced data structures, you often need the gory technical
details to make correct decisions about tradeoffs and usage. Succinct data
structures, for instance, which are a specific thing and not just a generic
adjective, are almost miraculously powerful, _but_ you'd better understand
exactly what the preconditions for using them are (which is a fairly
mathematical discussion) and what the tradeoffs are before you use them
because you will _not_ be able to just "tweak" them and fix them up later if
you're wrong.

~~~
cx1000
With that being said, would you agree that in general one does not need to be
intimately familiar with these to be a productive, useful software engineer?

~~~
jerf
I'm often amazed at how far a key/value store and an array type can get you.

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.

------
Koshkin
Often shied away from as too complicated, this book deserves the obligatory
mentioning: Knuth's _The Art of Computer Programming_. Although not using
Python and perhaps being too analytical and detailed for an average
programmer's taste, the book is _the_ single biggest classic treatise on
algorithms and data structures.

At the other end of the spectrum - accessible and brief, I find Dasgupta _et
al._ 's _Algorithms_ a refreshingly engaging read.

~~~
shanusmagnus
This book is often recommended, but I would dearly love to know how many of
its recommenders have actually read it.

~~~
nekopa
I have read the first 50 pages about a 100 times.

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.

~~~
hvmonk
off the topic, but what made you curious about Sanskrit?

~~~
vram22
I'm not the OP, but can comment about Sanskrit a bit. (I had studied Sanskrit
in school.) [Edit:] As a third language, apart from English and Hindi.

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.

~~~
abecedarius
Re: programming languages, it's worth mentioning that a Sanskrit grammarian
invented something like context-free grammars around 2500 years ago:
[https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form#Histo...](https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form#History)

~~~
vram22
Cool. I knew about Panini as a grammarian, but don't think I knew the part you
mention about context-free grammars.

~~~
vram22
An interesting thing from that Wikipedia article:

"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 :)

------
mrleinad
List of videos/notes 2014:
[http://courses.csail.mit.edu/6.851/spring14/lectures/](http://courses.csail.mit.edu/6.851/spring14/lectures/)

(spent 2 min trying to find them)

~~~
_asummers
They're also on YouTube under the OCW channel.

[https://www.youtube.com/playlist?list=PLUl4u3cNGP61hsJNdULdu...](https://www.youtube.com/playlist?list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf)

------
40acres
I've been watching the lectures & recitations from 6.006 Introduction to
Algorithms (Fall 2011) to brush up prior to an interview. Erik Demane, Srini
Devadas & Victor Cossan (Recitations) have been an amazing resource.

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.

------
fmardini
A very underrated book and one of my favorites is Udi Manber's Introuction to
Algorithms, highly recommended

~~~
hackerboos
I used that book for my dissertation. it had best explanation of the knapsack
algorithm if I recall correctly.

------
0x54MUR41
Thank you for sharing this.

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.

~~~
mej10
The Algorithm Design Manual by Steven Skiena

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.

~~~
marai2
I'll second that recommendation and op makes an important point that is rarely
expressed when threads on learning algorithms show up on HN: Don't be
discouraged if you find the material hard at first, "Even if you can't 100%
figure some of them out just trying to will help your thinking immensely."

------
adamnemecek
Does anyone use any of these ideas day to day? That's not to knock it, I'm
genuinely curious.

~~~
AYBABTME
Yup, in particular when I want to prove/disprove the impact of a design
proposal by preparing a simulation. Pay 1-2 days writing a simulation to save
6 months of wasted engineering effort.

------
nahumfarchi
Anyone knows which year has the best scribe notes?

------
lawless123
why are these hand drawn diagrams easier for me to understand and remember?

~~~
Jtsummers
Probably because they're visually more distinct. We tend to just glance over
things that look very familiar because "we know this" (not a conscious act).
Using different colors for different components also helps. Allows details to
"pop" out at you. Versus a diagram that's blue/black/gray/white.

------
ohyoutravel
These are great, Erik is a really smart guy. His intro to algorithms class is
also fantastic, which should be on MIT OpenCourseWare.

------
nhatbui
> If you haven't taken 6.854, you must have a strong understanding of
> algorithms at the undergraduate level, such as receiving an A in 6.046,
> having had a relevant UROP, involvement in computer competitions, etc.

Quite the pre-reqs...

------
zvrba
My small contribution to the field:
[http://zvrba.net/downloads/fusion.pdf](http://zvrba.net/downloads/fusion.pdf)

------
mathnode
I take it solutions by students are mostly done in Python now?

~~~
slmyers
It seems as though the instructor expects a compiled pdf, so maybe it's a more
theoretical course?

[http://courses.csail.mit.edu/6.851/spring14/hmwk.html](http://courses.csail.mit.edu/6.851/spring14/hmwk.html)

~~~
_asummers
I've watched the lecture series before, it focuses a decent amount on cache
oblivious data structures and doing realllllllly cool integer tricks to get
things fitting into compact bit maps.

------
burnbabyburn
also very interesting is Erik Demaine's work on geometric folding, at least
it's fun to watch various structures he prints and plays with.

------
abbiya
erik is the prof.

~~~
0xFFC
He is awesome,a s student in third world country (which universities sucks) I
watched to all his online lectures and I learned more than I learned in my 4
year of college,I always wander how person as young as he can achieve so much
success.

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.

~~~
LastMuel
Thank you for posting this! I love the perspective that your comment brings to
course material being available online. It really helps to understand the
power of educational material being abundantly available!

~~~
0xFFC
If I want to be honest I worship teachers and instructors I have watched their
course. I have been in sucky university, I know how it feels to waste your
time. The first moment I find my first course (Erik all algorithm course) it
was revolution in my life.

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.

------
zem
from the two-birds-with-one-stone-dept i've been looking for a good excuse to
dive into pyret, and using it to do the exercises from this course might just
be it. would anyone like to join me in a slow-paced workthrough?

------
MciprianM
Will there be a 2016 version?

~~~
JustSomeNobody
I'm not sure the algorithms would have changed between then and now.

------
make3
They better start close captioning or they will have to take the videos down

------
interdrift
Thank you for this, I'm so excited to take it.

------
ausjke
is the site down?

------
albertTJames
That's a great teach

------
jasonjei
This is a great resource for anybody that isn't formally trained in computer
science. A lot of programmers use an abstract data type like a dictionary or
hash table, but many of the self-taught and even some formally trained treat
it like a magical black box that stores key-value entries very efficiently.
What a hash table/dictionary gives it near O(1) properties is a good hashing
function for the key, and having a good distribution of buckets for all the
keys when collisions occur.

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. :)

~~~
markchen90
Are you serious? This class is intended for students with deep knowledge of CS
theory who want to learn more about recent data structures research. 6.006 and
6.046 are much more suitable if you aren't formally trained in computer
science.

