
Advanced Data Structures (2017) - rjammala
https://courses.csail.mit.edu/6.851/fall17/
======
joebergeron
Hey! I’m a coauthor with this guy :^). Incredibly fascinating (and extremely
smart) dude. His interest in origami is what drew me to MIT in the first
place, since I was interested in it as well from a young age. A few years ago
I took his class on the computability/complexity theory of folding, and we
ended up solving an open problem in the field and published a paper out of it
[0]. If you had told highschool me something like that would happen, I never
would have believed it :)

[0]: [https://arxiv.org/abs/1901.08564](https://arxiv.org/abs/1901.08564)

~~~
amrx431
Hi there. What would you suggest to a person who loves these kind of stuff
(data structures and algorithms) but finds it hard to develop the underlying
intuitions for coming up with these data-structure and algorithm? I personally
just hammer down on deliberate practice to recognise patterns and underlying
concepts to solve as many problems as I can on my own. I was wondering apart
from general DS and Algo what topics in Mathematics might supplement this
process?

~~~
pfdietz
I recently had someone ask me about a problem in machine learning. The
algorithm for it turned out to be something I had read about 30 years earlier,
where it was being used to accelerate the simulation of the motion of stars in
galaxies. I had never expected to use that algorithm, but its existence, if
not details, was there in my long term memory, waiting to surface.

So, I suggest you just read everything you can, getting the gist of things so
if you encounter something similar you know where to look.

I also suggest looking for little tricks you can apply again and again. For
example, some of the data structures in that course use a trick where you
break the structure into a top part, using one algorithm, and a bunch of leaf
parts, each of size maybe O(log n), that are handled using another algorithm.
Often this combination does better than either algorithm by itself.

~~~
amrx431
Few questions:

1\. Where can I find that algorithm you are talking about?

2\. The algorithm which you stated seems a bit complex from the algos taught
in the undergrad level, so what are the pre-requisites for understanding it
that I must be aware of?

3\. What books or papers you would suggest for reading?

4\. How the hell you remember something you read decades ago :)?

~~~
pfdietz
The ML problem involved, for a set of points on a line, computing the sum
(over all the pairs of distinct points) of a function d(x_i,x_j) that is, in
some sense, well behaved. The purpose was to compute the similarity of two
sets of real numbers.

It turns out this can be done (to sufficient accuracy) in nearly linear time
using something called the fast multipole method.

[http://www.umiacs.umd.edu/labs/cvl/pirl/vikas/publications/F...](http://www.umiacs.umd.edu/labs/cvl/pirl/vikas/publications/FMM_tutorial.pdf)

I wouldn't consider the "O(log n) chunks" trick all that complex, btw,
although Tarjan did have to point it out to me when I should have used it.

~~~
amrx431
> Tarjan did have to point it out to me when I should have used it.

Wow, you worked with Tarjan. How cool!!!.

~~~
pfdietz
Not directly, but he did point out the improvement.

------
jolmg
Got confused by the broken link too. Those aren't separate links. It's a
single link, and given the name of the file is "poster-design.pdf", I don't
think the PDF is very important. It's just an image that gives examples of
what is probably covered. The real content is described below as the video
lectures and notes of the class[1] and the github account[2]. There are also
problem sets[3], and it recommends a couple of books[4][5], both of which are
apparently free.

[1]
[https://courses.csail.mit.edu/6.851/fall17/lectures/](https://courses.csail.mit.edu/6.851/fall17/lectures/)

[2] [https://github.com/6851-2017](https://github.com/6851-2017)

[3]
[https://courses.csail.mit.edu/6.851/fall17/psets/](https://courses.csail.mit.edu/6.851/fall17/psets/)

[4]
[http://epubs.siam.org/doi/book/10.1137/1.9781611970265](http://epubs.siam.org/doi/book/10.1137/1.9781611970265)

[5] [http://opendatastructures.org/](http://opendatastructures.org/)

~~~
daveFNbuck
It's too bad that the links are broken. When the links at the top of the page
didn't work, I immediately assumed that this was for an old course and none of
the material would still be available.

I only kept looking because I didn't think a useless site would make it to the
top of HN. People who find the course site another way might not have a reason
to keep looking.

~~~
jolmg
What links are broken? I only know of a single link to a seemingly unimportant
file that is broken.

~~~
daveFNbuck
I thought that the single image was a series of links to the different parts
of the courses. It's at the top of the page and has 9 distinct icons
representing different things that will be taught. It looks a lot like it's
there for navigation. When clicking on each of them didn't work, I assumed I
couldn't get to the course content.

~~~
jolmg
Yes, this is what I tried to explain in my top-level comment.

~~~
daveFNbuck
Ah, I thought you were saying that each link was actually to the same URL. I
see now what you actually meant.

------
jammygit
As a busy self-learner, when is it time to learn data structures in depth? I
feel like there are always 10 other technologies I need to know more urgently
(eg, more bash, Linux, testing frameworks, deep learning, c++ libraries,
linear algebra, common security mistakes/attacks, OpenGL, etc)

~~~
joebergeron
Given the bulk of the things you've listed here, which seem to serve very
practical purposes, maybe never. I wouldn't call data structures a
"technology" so much as I would label them as a theoretical underpinning to
much of computer science. If your goal is to learn practical technologies
(which is a good goal!) you don't really _need_ to learn data structures
deeply -- they're just not a skill you need in day-to-day software life (for
most people). I'm a software engineer, and the idea of implementing so much as
a binary heap (which is nearly one of the first data structures you learn) at
work is a preposterous idea. That said, if you want to learn about data
structures, go for it! They're incredibly interesting and will give you a way
deeper appreciation for computer science and the work that goes into
developing complex algorithms. There's just not necessarily a "pedagogical"
place to stick in learning data structures with the sorts of technologies
you've listed.

~~~
ascar
> _" they're just not a skill you need in day-to-day software life (for most
> people)."_

I mostly disagree. You won't need to implement them, but a working knowledge
of the basics is the basis of any performance analysis and can make a huge
difference in system performance in day to day programming. At some point all
the small inefficiencies also add up.

I would go so far as to say that data structures and basic algorithms (e.g.
Dijkstra) are more important to become a competent engineer than any of the
practical tools he listed. It's like the difference between a mechanic and a
mechanical engineer.

There is also a reason they are taught very early in a computer science
degree.

~~~
TrackerFF
I think we should remember that the vast majority of computer developers and
engineers will not, and probably never, work on stuff that requires deep
understanding of things like data structures and algorithms, even those with
advanced degrees. Most are just, how to put this, IT janitors.

To use your mechanic and mechanical engineer analogy: They're not even
mechanics, they simply change the oil and light bulbs from time to time, along
with cleaning the interior.

Not saying that it's not useful - you'd get a much better understanding of
things...but this obsession with learning everything under the sun just to be
"ready" for the job is overkill

~~~
ascar
I guess it depends what you want to work on and what your career goals are. I
think my mechanic vs mechanical engineer example is actually a pretty good
analogy of actual conditions. You have (many) people learning how to use tools
and fix known problems (like mechanics, or e.g. CRUD developers) versus the
others that actually need to solve problems with unknown solutions or optimize
existing systems (the engineers). Maybe also with known solutions, but with a
far deeper theoretical knowledge as a base for doing that.

Yes, the majority of work is on solved problems and we need far more mechanics
than engineers. But it's not such a clear cut and a lot of actual software
engineers work on solved problems most of their time and only spend a small
amount of time on the engineering part (which is probably similar to other
engineering disciplines). But when you spend the small amount of time on
engineering work these basics are important and I realized multiple times that
I could make better decisions because of it. And I'm kind of certain that's
the case for most engineers with an academic background or self-taught basics
though they might not even realize it.

------
po_
the professor is a fascinating guy:

[http://erikdemaine.org/](http://erikdemaine.org/)

[https://en.wikipedia.org/wiki/Erik_Demaine](https://en.wikipedia.org/wiki/Erik_Demaine)

EDIT: so is the coauthor!
[http://joebergeron.io/posts/post_four.html](http://joebergeron.io/posts/post_four.html)

~~~
jbarciauskas
He's obviously incredibly smart to have achieved what he did at such a young
age, but he's actually a joy to listen to as well.

~~~
paulgb
I was trying to remember why his name sounded familiar. 12 years ago, when I
was an 18 year old with mediocre math grades trying to figure out what to do
with my life, I went to a guest lecture he was doing down the street at
Dalhousie University. It was the first time I remember being excited about
math, which became my major.

------
elteto
FYI: lecture notes are here
[https://courses.csail.mit.edu/6.851/fall17/lectures/](https://courses.csail.mit.edu/6.851/fall17/lectures/)

~~~
ehsankia
Updated notes from 2017 are cool, though I was hoping the videos would be
updated too. They are good, but I was hoping for newer higher resolution
recordings.

------
kgwxd
Years ago, I watched all those video preparing for a Google interview. They
are really great. I was told advanced data structures would be a big part of
it. Not a single thing came up in the process :/

~~~
paxys
Tech interviews never go beyond the most basic data structures. I'm willing to
bet that most of the interviewers would not be familiar with these ones
either.

------
anibalfernando
22 recorded classes

[https://ocw.mit.edu/courses/electrical-engineering-and-
compu...](https://ocw.mit.edu/courses/electrical-engineering-and-computer-
science/6-851-advanced-data-structures-spring-2012/lecture-videos/)

------
dejawu
I was pleasantly surprised to see that improving Wikipedia articles is an
acceptable final project for this course. Is this an MIT thing?

~~~
snakeboy
I saw that too! What a brilliant idea, given that extremely technical articles
tend to have inconsistent/incomplete coverage, and could benefit greatly from
this kind of initiative.

------
arnioxux
I watched these lectures a few years ago and they were really good.

Since this is meant to be a graduate level research course, I wonder if any
cutting edge topics have been added since? Were there any major advances or
new ideas in fundamental data structures in the past few years?

------
brikelly
“Grading...There are four requirements:”

And then it lists _five_ requirements...do I get the MIT course description
equivalent of a Knuth check now?

~~~
meruru
There are two hard problems in computer science...

------
mothas
I happened to interact with Erik Demaine via an open source project(KaTex). It
was my first OSS contribution and he was very welcoming and friendly. Of
course, I was also humbled to read about his work.

------
gauravphoenix
I am getting 404 when I click on linked images.

~~~
adriansky
me too!

------
neves
The data structures look really cool, but I couldn't image example to make use
of them in "everyday" software. Would someone give me some example of problems
that would be easier to solve with special data structures?

~~~
tempguy9999
I haven't looked at the site properly yet, bear that in mind, but to answer
your question I probably never have used anything 'interesting' in a couple of
decades of working in industry, despite giving a lot of time learning about
such things - I do find them interesting.

Nearest I might have got was trying to use a bloom filter in a vehicle
tracker, but nope.

What learning about stuff generally has given me is indirect, the ability to
dig down and optimise because I understand systems. As I read up on eg.
sorting I understand that quicksort is very much not the quickest sort and
fixed bad performance bugs from its misuse.

Or understanding Btrees so I can get very good performance out of DBs, even if
I've never written a Btree and frankly never want to.

Stuff like that. Maybe one day I'll find the need for dynamic programming and
learn it properly, until then it's just a waste of time.

But use them directly, no. Surely sux.

------
cabaalis
At my college, this class was the primary weeding-out class in junior year.
Started with a full class, maybe 50? At the end of the semester there were 7
of us.

------
jorblumesea
These are some of my favorite lectures, although often goes over my head.
Whenever I think I've done something clever, I watch these to ground me.

------
gigatexal
Bookmarked for when I master basic data structures.

------
rjammala
This works:
[https://courses.csail.mit.edu/6.851/fall17/lectures/](https://courses.csail.mit.edu/6.851/fall17/lectures/)

------
cphoover
Links are broken :/

------
1-6
Honest question, I'm very new to this but I really want to learn. Does putting
the video on repeat help with grasping the concepts?

~~~
tclancy
I haven’t watched any of it, didn’t pay much attention in college and get
freaked out when I don’t understand things the first time, so take this all
with a grain of salt, but I would say try watching parts and then find a
reason/ way to use the individual concepts.

------
1-6
Is the instructor using Hagoromo Fulltouch Chalk?

~~~
leovander
Ha, I remember seeing that post recently. Looks like it goes back to a 2015
gizmodo article, and was in a recent youtube clip.

[https://news.ycombinator.com/item?id=19718287](https://news.ycombinator.com/item?id=19718287)

[https://news.ycombinator.com/item?id=9723202](https://news.ycombinator.com/item?id=9723202)

[https://www.youtube.com/watch?v=PhNUjg9X4g8](https://www.youtube.com/watch?v=PhNUjg9X4g8)

------
Areading314
Having been a double major at MIT I still get anxiety spikes whenever I look
at one of these course webpages.

Looks like a great course though!

------
prassi
Guess this might help,

[https://pastebin.com/m7q1WRcw](https://pastebin.com/m7q1WRcw)

------
gumby
Love that they recommend going to Tarjan -- nothing like drinking from the
original well!

------
taesu
link to pdfs 404

------
person_of_color
Will this be good to study for a FAANG interview?

~~~
orn688
Having just spent several months preparing for FAANG interviews myself, I
would say not - these go far beyond the data structures I'd expect an
interview to cover at most tech companies.

~~~
person_of_color
Thanks. What study guides did you use?

